• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "libm.h"
2 
3 #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
scalbnl(long double x,int n)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
scalbnl(long double x,int n)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 * 0x1p113L;
24 		n += 16382 - 113;
25 		if (n < -16382) {
26 			x *= 0x1p-16382L * 0x1p113L;
27 			n += 16382 - 113;
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