/* * Copyright (C) 2018 Tomasz Kramkowski * SPDX-License-Identifier: MIT */ #include #include #include #include #include "ieee754.h" // ieee754f: convert f32 to float float ieee754f(unsigned long b) { bool isneg; int exp; float n; isneg = (b >> 31) & 0x1; exp = (b >> 23) & 0xff; n = b & 0x7fffff; if (exp == 0xff) { if (n) { return NAN; } else { return isneg ? -INFINITY : INFINITY; } } else if (exp == 0) { if (n == 0) return isneg ? -0.0 : 0.0; exp = -126; } else { n += 0x1p23f; exp -= 127; } n = ldexpf(n, exp - 23); return isneg ? -n : n; }