Fix ldbl-96, ldbl-128ibm atanhl inaccuracy (bug 18046, bug 18047).

System Internals / glibc - Joseph Myers [codesourcery.com] - 27 February 2015 11:48 UTC

The threshold in ldbl-96 atanhl for when to return the argument, 0x1p-28, is a bit too big, and that in ldbl-128ibm atanhl is much too big (the relevant condition being x^3/3 being < 0.5ulp of x), resulting in errors a bit above the limits of those considered acceptable in glibc in the ldbl-96 case, and in large errors in the ldbl-128ibm case. This patch changes those implementations to use more appropriate thresholds and adds tests around the thresholds for
various formats.

Tested for x86_64, x86 and powerpc. x86_64 and x86 ulps updated accordingly.

[BZ #18046] [BZ #18047]
- sysdeps/ieee754/ldbl-128ibm/e_atanhl.c (__ieee754_atanhl): Use 0x1p-56L as threshold for just returning the argument.
- sysdeps/ieee754/ldbl-96/e_atanhl.c (__ieee754_atanhl): Use 0x1p-32L as threshold for just returning the argument.
- math/auto-libm-test-in: Add more tests of atanh.
- math/auto-libm-test-out: Regenerated.
- sysdeps/i386/fpu/libm-test-ulps: Update.
- sysdeps/x86_64/fpu/libm-test-ulp: Likewise.

2ca725c Fix ldbl-96, ldbl-128ibm atanhl inaccuracy (bug 18046, bug 18047).
ChangeLog | 13 +
NEWS | 3 +-
math/auto-libm-test-in | 31 ++
math/auto-libm-test-out | 875 ++++++++++++++++++++++++++++++++
sysdeps/i386/fpu/libm-test-ulps | 2 +
sysdeps/ieee754/ldbl-128ibm/e_atanhl.c | 2 +-
sysdeps/ieee754/ldbl-96/e_atanhl.c | 4 +-
sysdeps/x86_64/fpu/libm-test-ulps | 4 +
8 files changed, 930 insertions(+), 4 deletions(-)

Upstream: sourceware.org


  • Share