1 #include "libm.h" 2 3 #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 4 long double frexpl(long double x, int *e) 5 { 6 return frexp(x, e); 7 } 8 #elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384 9 long double frexpl(long double x, int *e) 10 { 11 union ldshape u = {x}; 12 int ee = u.i.se & 0x7fff; 13 14 if (!ee) { 15 if (x) { 16 x = frexpl(x*0x1p120, e); 17 *e -= 120; 18 } else *e = 0; 19 return x; 20 } else if (ee == 0x7fff) { 21 return x; 22 } 23 24 *e = ee - 0x3ffe; 25 u.i.se &= 0x8000; 26 u.i.se |= 0x3ffe; 27 return u.f; 28 } 29 #endif 30