w32ToFloat :: Word32 -> Float w32ToFloat w | ep == 255 && sf /= 0 = 0 / 0 | sf == 255 = sign / 0 | sf == 0 && ep == 0 = sign * 0 | otherwise = sign * encodeFloat r e where sn = shiftR w 31 ep = shiftR w 23 .&. 0xff sf = w .&. 0x7fffff
sign = if sn == 1 then -1 else 1 e = fromIntegral ep - 127 - 23 r = fromIntegral sf + 0x800000