math: fix modfl.c bug
authornsz <nsz@port70.net>
Wed, 28 Mar 2012 21:51:09 +0000 (23:51 +0200)
committernsz <nsz@port70.net>
Wed, 28 Mar 2012 21:51:09 +0000 (23:51 +0200)
modfl(+-inf) was wrong on ld80 because the explicit msb
was not taken into account during inf vs nan check

src/math/modfl.c

index 6520a1c2baab5f8435bfc570908eb8c2c7082bc3..f6d624446c8dfd2b5dce4eeb6074f591284715fe 100644 (file)
@@ -81,7 +81,7 @@ long double modfl(long double x, long double *iptr)
                return x - ux.e;
        } else if (e >= LDBL_MANT_DIG - 1) {    /* x has no fraction part. */
                *iptr = x;
-               if (e == LDBL_MAX_EXP && (ux.bits.manh|ux.bits.manl)) /* nan */
+               if (e == LDBL_MAX_EXP && ((ux.bits.manh&~LDBL_NBIT)|ux.bits.manl)) /* nan */
                        return x;
                return zero[ux.bits.sign];
        } else {                                /* Fraction part is in manl. */