summaryrefslogtreecommitdiffstats
path: root/lib/msun
diff options
context:
space:
mode:
authorkargl <kargl@FreeBSD.org>2012-09-23 18:32:03 +0000
committerkargl <kargl@FreeBSD.org>2012-09-23 18:32:03 +0000
commit3d431ee1496a9253b224fdc00c445d0ab59e1eb3 (patch)
tree032cf1f1caf6552d658d3aa5de3164c10686d17a /lib/msun
parent1865dfeba6ad285723285187c6d951f5cd409b15 (diff)
downloadFreeBSD-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.c13
-rw-r--r--lib/msun/ld80/s_expl.c2
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);
OpenPOWER on IntegriCloud