X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmath%2Fscalbnl.c;h=db44dab06482748a06808903c9b011740feabf92;hb=11ddc314b57196519316103b02acffe10299dad3;hp=a5d0adba437a5e0b04f47917204f4b0118a0bc4c;hpb=da7458a602a6f0bdea25d6b9b613372048a974e6;p=musl diff --git a/src/math/scalbnl.c b/src/math/scalbnl.c index a5d0adba..db44dab0 100644 --- a/src/math/scalbnl.c +++ b/src/math/scalbnl.c @@ -8,7 +8,7 @@ long double scalbnl(long double x, int n) #elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384 long double scalbnl(long double x, int n) { - union IEEEl2bits scale; + union ldshape u; if (n > 16383) { x *= 0x1p16383L; @@ -17,20 +17,20 @@ long double scalbnl(long double x, int n) x *= 0x1p16383L; n -= 16383; if (n > 16383) - return x * 0x1p16383L; + n = 16383; } } else if (n < -16382) { - x *= 0x1p-16382L; - n += 16382; + x *= 0x1p-16382L * 0x1p113L; + n += 16382 - 113; if (n < -16382) { - x *= 0x1p-16382L; - n += 16382; + x *= 0x1p-16382L * 0x1p113L; + n += 16382 - 113; if (n < -16382) - return x * 0x1p-16382L; + n = -16382; } } - scale.e = 1.0L; - scale.bits.exp = 0x3fff + n; - return x * scale.e; + u.f = 1.0; + u.i.se = 0x3fff + n; + return x * u.f; } #endif