Consider
> :m Float
Loading module Cryptol
Loading module Float
Float> fpFromBits (zero#0x1) : Float32
0x8.0p-152
This, I believe, correctly represents the smallest positive 32-bit subnormal floating-point value. However, if we encode this back into bits, we get something else entirely.
Float> fpToBits (0x8.0p-152 : Float32)
0xf5000000
Float> fpToBits (fpFromBits (zero#0x1) : Float32)
0xf5000000