The documentation for array-copy[!] states:

  Assumes that `array` is an array, `storage-class` is a storage class
  that can manipulate all the elements of `array` [...]

Here I assume "manipulate" means accept as a setter value,
which is what Chibi implements.  Thus it is never possible to
convert from an exact storage class to an inexact one, or vice
versa, even if the values will fit.  Converting between inexact
storages will always work, and converting between exact
storages will depend on the actual values.

It's actually extremely common and useful to allow exactness
conversions, e.g. as done by tensorflow tf.cast or pytorch
Tensor.to().  The former throws an error if the values don't fit,
though the latter is woefully underdocumented and seems to
coerce the values arbitrarily.

We could consider an all-in-one conversion with rounding
and bounding rules, but it's sufficient to have a procedure
that will just perform exactness conversions as needed and
leave ensuring the values fit to the programmer.

Depending on how much ambiguity people read into
"manipulate" it may be too late to clarify array-copy to
support this though.

--
Alex