18 static_assert(
sizeof(float) ==
sizeof(uint32_t),
"Unexpected float type size");
19 std::memcpy(&f, &value,
sizeof(uint32_t));
21 uint16_t sign = ((f >> 16) & 0x8000);
22 int16_t exponent = ((f >> 23) & 0xff) - 127 + 15;
23 uint16_t mantissa = ((f >> 13) & 0x3ff);
29 mantissa = (mantissa | 0x400) >> (1 - exponent);
30 return sign | mantissa;
33 else if (exponent == 0xff - (127 - 15)) {
41 else if (exponent > 30) {
45 return sign | (exponent << 10) | mantissa;