author | nsz <nsz@port70.net> | 2012年03月19日 22:57:58 +0100 |
---|---|---|
committer | nsz <nsz@port70.net> | 2012年03月19日 22:57:58 +0100 |
commit | 2786c7d21611b9fa3b2fe356542cf213e7dd0ba4 (patch) | |
tree | b3954e9cec7580f5dc851491d3b60d808aae4259 /src/math/fma.c | |
parent | 01fdfd491b5d83b72099fbae14c4a71ed8e0b945 (diff) | |
download | musl-2786c7d21611b9fa3b2fe356542cf213e7dd0ba4.tar.gz |
-rw-r--r-- | src/math/fma.c | 12 |
diff --git a/src/math/fma.c b/src/math/fma.c index 87d450c7..5fb95406 100644 --- a/src/math/fma.c +++ b/src/math/fma.c @@ -247,7 +247,7 @@ static inline double add_and_denormalize(double a, double b, int scale) INSERT_WORD64(sum.hi, hibits); } } - return (ldexp(sum.hi, scale)); + return scalbn(sum.hi, scale); } /* @@ -364,7 +364,7 @@ double fma(double x, double y, double z) } } if (spread <= DBL_MANT_DIG * 2) - zs = ldexp(zs, -spread); + zs = scalbn(zs, -spread); else zs = copysign(DBL_MIN, zs); @@ -390,7 +390,7 @@ double fma(double x, double y, double z) */ fesetround(oround); volatile double vzs = zs; /* XXX gcc CSE bug workaround */ - return (xy.hi + vzs + ldexp(xy.lo, spread)); + return xy.hi + vzs + scalbn(xy.lo, spread); } if (oround != FE_TONEAREST) { @@ -400,13 +400,13 @@ double fma(double x, double y, double z) */ fesetround(oround); adj = r.lo + xy.lo; - return (ldexp(r.hi + adj, spread)); + return scalbn(r.hi + adj, spread); } adj = add_adjusted(r.lo, xy.lo); if (spread + ilogb(r.hi) > -1023) - return (ldexp(r.hi + adj, spread)); + return scalbn(r.hi + adj, spread); else - return (add_and_denormalize(r.hi, adj, spread)); + return add_and_denormalize(r.hi, adj, spread); } #endif |