Home | History | Annotate | Download | only in musl-math
      1 #include "libm.h"
      2 
      3 #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
      4 long double scalbnl(long double x, int n)
      5 {
      6 	return scalbn(x, n);
      7 }
      8 #elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
      9 long double scalbnl(long double x, int n)
     10 {
     11 	union ldshape u;
     12 
     13 	if (n > 16383) {
     14 		x *= 0x1p16383L;
     15 		n -= 16383;
     16 		if (n > 16383) {
     17 			x *= 0x1p16383L;
     18 			n -= 16383;
     19 			if (n > 16383)
     20 				n = 16383;
     21 		}
     22 	} else if (n < -16382) {
     23 		x *= 0x1p-16382L;
     24 		n += 16382;
     25 		if (n < -16382) {
     26 			x *= 0x1p-16382L;
     27 			n += 16382;
     28 			if (n < -16382)
     29 				n = -16382;
     30 		}
     31 	}
     32 	u.f = 1.0;
     33 	u.i.se = 0x3fff + n;
     34 	return x * u.f;
     35 }
     36 #endif
     37