From b821f414e480d7f9e097fa453b1c9bfd44d64316 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 7 Jan 2014 22:00:04 +0000 Subject: 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. --- sysdeps/ieee754/ldbl-128ibm/e_coshl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sysdeps') 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; -- cgit v1.1