46 {
47 const bool negative = (value & 0x8000U) != 0U;
48 const uint32_t exponent = (value >> 10U) & 0x1FU;
49 const uint32_t mantissa = value & 0x3FFU;
50 float result = 0.0F;
51 if (exponent == 0U) {
52 result = std::ldexp(static_cast<float>(mantissa), -24);
53 } else if (exponent == 31U) {
54 result = mantissa == 0U ? std::numeric_limits<float>::infinity() : std::numeric_limits<float>::quiet_NaN();
55 } else {
56 result = std::ldexp(1.0F + static_cast<float>(mantissa) / 1024.0F, static_cast<int>(exponent) - 15);
57 }
58 return negative ? -result : result;
59 }