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