frexpl.c raw

   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