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