1 #include <math.h> 2 #include <stdint.h> 3 4 float frexpf(float x, int *e) 5 { 6 union { float f; uint32_t i; } y = { x }; 7 int ee = y.i>>23 & 0xff; 8 9 if (!ee) { 10 if (x) { 11 x = frexpf(x*0x1p64, e); 12 *e -= 64; 13 } else *e = 0; 14 return x; 15 } else if (ee == 0xff) { 16 return x; 17 } 18 19 *e = ee - 0x7e; 20 y.i &= 0x807ffffful; 21 y.i |= 0x3f000000ul; 22 return y.f; 23 } 24