github.com/afumu/libc@v0.0.6/musl/src/math/frexpl.c (about)

     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