diff options
author | kargl <kargl@FreeBSD.org> | 2012-09-23 18:32:03 +0000 |
---|---|---|
committer | kargl <kargl@FreeBSD.org> | 2012-09-23 18:32:03 +0000 |
commit | 3d431ee1496a9253b224fdc00c445d0ab59e1eb3 (patch) | |
tree | 032cf1f1caf6552d658d3aa5de3164c10686d17a /lib/msun | |
parent | 1865dfeba6ad285723285187c6d951f5cd409b15 (diff) | |
download | FreeBSD-src-3d431ee1496a9253b224fdc00c445d0ab59e1eb3.zip FreeBSD-src-3d431ee1496a9253b224fdc00c445d0ab59e1eb3.tar.gz |
* ld80/s_expl.c:
. Fix the threshold for expl(x) where |x| is small.
. Also update the previously incorrect comment to match the
new threshold.
* ld128/s_expl.c:
. Re-order logic in exceptional cases to match the logic used in
other long double functions.
. Fix the threshold for expl(x) where is |x| is small.
. Also update the previously incorrect comment to match the
new threshold.
Submitted by: bde
Approved by: das (mentor)
Diffstat (limited to 'lib/msun')
-rw-r--r-- | lib/msun/ld128/s_expl.c | 13 | ||||
-rw-r--r-- | lib/msun/ld80/s_expl.c | 2 |
2 files changed, 6 insertions, 9 deletions
diff --git a/lib/msun/ld128/s_expl.c b/lib/msun/ld128/s_expl.c index c8b7550..5052c3a 100644 --- a/lib/msun/ld128/s_expl.c +++ b/lib/msun/ld128/s_expl.c @@ -211,19 +211,16 @@ expl(long double x) ix = hx & 0x7fff; if (ix >= BIAS + 13) { /* |x| >= 8192 or x is NaN */ if (ix == BIAS + LDBL_MAX_EXP) { - if (u.xbits.manh != 0 - || u.xbits.manl != 0 - || (hx & 0x8000) == 0) - return (x + x); /* x is NaN or +Inf */ - else - return (0.0); /* x is -Inf */ + if (hx & 0x8000 && u.xbits.manh == 0 && + u.xbits.manl == 0) + return (0.0L); /* x is -Inf */ + return (x + x); /* x is +Inf or NaN */ } if (x > o_threshold) return (huge * huge); if (x < u_threshold) return (tiny * tiny); - } else if (ix <= BIAS - 115) { /* |x| < 0x1p-33 */ - /* includes pseudo-denormals */ + } else if (ix < BIAS - 115) { /* |x| < 0x1p-115 */ if (huge + x > 1.0L) /* trigger inexact iff x != 0 */ return (1.0L + x); } diff --git a/lib/msun/ld80/s_expl.c b/lib/msun/ld80/s_expl.c index b9cf4ae..dfd49e5 100644 --- a/lib/msun/ld80/s_expl.c +++ b/lib/msun/ld80/s_expl.c @@ -249,7 +249,7 @@ expl(long double x) return (huge * huge); if (x < u_threshold.e) return (tiny * tiny); - } else if (ix <= BIAS - 34) { /* |x| < 0x1p-33 */ + } else if (ix < BIAS - 66) { /* |x| < 0x1p-66 */ /* includes pseudo-denormals */ if (huge + x > 1.0L) /* trigger inexact iff x != 0 */ return (1.0L + x); |