aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/ieee754
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-01-07 22:00:04 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-01-07 22:00:04 +0000
commitb821f414e480d7f9e097fa453b1c9bfd44d64316 (patch)
tree92688c5b7d5228b2e168d3acc30bcac00a196705 /sysdeps/ieee754
parent196f456b842ee96e1bf1e5ae6ed21ba427dee3f3 (diff)
downloadglibc-b821f414e480d7f9e097fa453b1c9bfd44d64316.tar
glibc-b821f414e480d7f9e097fa453b1c9bfd44d64316.tar.gz
glibc-b821f414e480d7f9e097fa453b1c9bfd44d64316.tar.bz2
glibc-b821f414e480d7f9e097fa453b1c9bfd44d64316.zip
Fix ldbl-128ibm coshl spurious overflows (bug 16407).
This patch fixes bug 16407, spurious overflows from ldbl-128ibm coshl. The implementation assumed that a high part (reinterpreted as an integer) of the absolute value of the argument of 0x408633ce8fb9f87dLL or more meant overflow, but the actual threshold has high part 0x408633ce8fb9f87eLL (and a negative low part). The patch adjusts the threshold accordingly. sinhl probably has the same issue, but I didn't get that far in adding tests of special cases (such as just below and above overflow) before the freeze and during the freeze is not a suitable time to add them (as they'd require ulps to be regenerated again), so I'm not changing that function for now; when I add more tests of special cases, we'll discover whether sinhl indeed has this problem. Tested powerpc32. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c (__ieee754_coshl): Increase overflow threshold.
Diffstat (limited to 'sysdeps/ieee754')
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_coshl.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_coshl.c b/sysdeps/ieee754/ldbl-128ibm/e_coshl.c
index 05683bc02f..92313e25e2 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_coshl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_coshl.c
@@ -69,7 +69,7 @@ __ieee754_coshl (long double x)
if (ix < 0x40862e42fefa39efLL) return half*__ieee754_expl(fabsl(x));
/* |x| in [log(maxdouble), overflowthresold] */
- if (ix < 0x408633ce8fb9f87dLL) {
+ if (ix < 0x408633ce8fb9f87fLL) {
w = __ieee754_expl(half*fabsl(x));
t = half*w;
return t*w;