"Each element of a homogeneous vector must be valid. That is, for an integer vector, it must be an exact integer within the inclusive range specified above; for a float vector, it must be an inexact real number; and for a complex vector, it must be an inexact complex number. It is an error to try to use a constructor or mutator to set an element to an invalid value."
If it's the case that only the supported range of exact integers are considered valid for exact-integer vectors, then shouldn't it also be the case that only the set of value-preserved inexact reals are supported by the floating point vectors?
My thoughts here:
(f32? 1.0f0) ==> #t ;; obviously
(f32? 1.0) ==> #t ;; where 1.0 is eqv? to 1.0d0
(f32? (fladjacent 1.0 2.0)) ==> #f
(f64? 1.0f0) ==> #t
(f64? 1.19238f0) ==> #t ;; every single is preserved in a double
I would get it if you said "no, I meant what I said", given that most schemes don't support multi-precision in scalar inexacts but (srfi 160) should support both f32 and f64 vectors -- the round-off error when constructing/assigning f32vectors is expected.
Secondly, with respect to c64 & c128. When you say "must be an inexact complex number" -- do you mean a number that passes (and (inexact? x) (complex? x)) or one that passes (and (inexact? (real-part x)) (inexact? (imag-part x)))