diff options
author | Joseph Myers <joseph@codesourcery.com> | 2014-01-07 22:00:04 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2014-01-07 22:00:04 +0000 |
commit | b821f414e480d7f9e097fa453b1c9bfd44d64316 (patch) | |
tree | 92688c5b7d5228b2e168d3acc30bcac00a196705 /sysdeps/ieee754/ldbl-128ibm/e_coshl.c | |
parent | 196f456b842ee96e1bf1e5ae6ed21ba427dee3f3 (diff) | |
download | glibc-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.
Diffstat (limited to 'sysdeps/ieee754/ldbl-128ibm/e_coshl.c')
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/e_coshl.c | 2 |
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 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; |