123456789101112131415161718192021222324252627282930313233343536 |
- #include "libm.h"
- #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
- long double scalbnl(long double x, int n)
- {
- return scalbn(x, n);
- }
- #elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
- long double scalbnl(long double x, int n)
- {
- union ldshape u;
- if (n > 16383) {
- x *= 0x1p16383L;
- n -= 16383;
- if (n > 16383) {
- x *= 0x1p16383L;
- n -= 16383;
- if (n > 16383)
- n = 16383;
- }
- } else if (n < -16382) {
- x *= 0x1p-16382L * 0x1p113L;
- n += 16382 - 113;
- if (n < -16382) {
- x *= 0x1p-16382L * 0x1p113L;
- n += 16382 - 113;
- if (n < -16382)
- n = -16382;
- }
- }
- u.f = 1.0;
- u.i.se = 0x3fff + n;
- return x * u.f;
- }
- #endif
|