diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-08-10 15:25:10 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-08-10 15:25:10 +0000 |
commit | d0649b2d8efca33363e399f1ba07d77e85901cfc (patch) | |
tree | 7b9e371adc311e50e9dd8083f9b602c44310df0b /sysdeps | |
parent | d2ff039fa1636e42fad4a4074f9889ad47abc426 (diff) | |
download | glibc-d0649b2d8efca33363e399f1ba07d77e85901cfc.zip glibc-d0649b2d8efca33363e399f1ba07d77e85901cfc.tar.gz glibc-d0649b2d8efca33363e399f1ba07d77e85901cfc.tar.bz2 |
Fix ldbl-128ibm sinhl inaccuracy near 0 (bug 18789).
ldbl-128ibm sinhl uses a too-big threshold to decide when to return
the argument, resulting in large errors. This patch fixes it to use a
more appropriate threshold.
Tested for x86_64, x86 and powerpc.
[BZ #18789]
* sysdeps/ieee754/ldbl-128ibm/e_sinhl.c (__ieee754_sinhl): Use
smaller threshold for returning the argument.
* math/auto-libm-test-in: Add more tests of sinh.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/i386/fpu/libm-test-ulps | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/e_sinhl.c | 2 |
2 files changed, 3 insertions, 1 deletions
diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps index a11dd38..eddb3dc 100644 --- a/sysdeps/i386/fpu/libm-test-ulps +++ b/sysdeps/i386/fpu/libm-test-ulps @@ -1872,6 +1872,8 @@ ildouble: 4 ldouble: 5 Function: "sinh_towardzero": +idouble: 1 +ifloat: 1 ildouble: 3 ldouble: 4 diff --git a/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c b/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c index 08e5d86..00115df 100644 --- a/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c +++ b/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c @@ -53,7 +53,7 @@ __ieee754_sinhl(long double x) if (jx<0) h = -h; /* |x| in [0,40], return sign(x)*0.5*(E+E/(E+1))) */ if (ix < 0x4044000000000000LL) { /* |x|<40 */ - if (ix<0x3e20000000000000LL) { /* |x|<2**-29 */ + if (ix<0x3c90000000000000LL) { /* |x|<2**-54 */ if (fabsl (x) < LDBL_MIN) { long double force_underflow = x * x; |