about summary refs log tree commit diff
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.gz
glibc-b821f414e480d7f9e097fa453b1c9bfd44d64316.tar.xz
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;