aboutsummaryrefslogtreecommitdiff
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
parent196f456b842ee96e1bf1e5ae6ed21ba427dee3f3 (diff)
downloadglibc-b821f414e480d7f9e097fa453b1c9bfd44d64316.zip
glibc-b821f414e480d7f9e097fa453b1c9bfd44d64316.tar.gz
glibc-b821f414e480d7f9e097fa453b1c9bfd44d64316.tar.bz2
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.
-rw-r--r--ChangeLog6
-rw-r--r--NEWS2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_coshl.c2
3 files changed, 8 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index be41012..ce828b4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-01-07 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #16407]
+ * sysdeps/ieee754/ldbl-128ibm/e_coshl.c (__ieee754_coshl):
+ Increase overflow threshold.
+
2014-01-07 Ondřej Bílka <neleai@seznam.cz>
[BZ #14286]
diff --git a/NEWS b/NEWS
index d674772..366e1d4 100644
--- a/NEWS
+++ b/NEWS
@@ -24,7 +24,7 @@ Version 2.19
16103, 16112, 16143, 16144, 16146, 16150, 16151, 16153, 16167, 16172,
16195, 16214, 16245, 16271, 16274, 16283, 16289, 16293, 16314, 16316,
16330, 16337, 16338, 16356, 16365, 16366, 16369, 16372, 16375, 16379,
- 16384, 16385, 16386, 16387, 16390, 16400.
+ 16384, 16385, 16386, 16387, 16390, 16400, 16407.
* Slovenian translations for glibc messages have been contributed by the
Translation Project's Slovenian team of translators.
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_coshl.c b/sysdeps/ieee754/ldbl-128ibm/e_coshl.c
index 05683bc..92313e2 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;