[COMMITTED] math: Sync atanh from CORE-MATH

Adhemerval Zanella adhemerval.zanella@linaro.org
Wed Nov 26 18:43:09 GMT 2025


The CORE-MATH commit dc9465e7 fixes some issues:

Failure: Test: atanh_towardzero (0x8.3f79103b3c64p-4)
Result:
 is:          5.7018661316561103e-01   0x1.23ef7ff0539c6p-1
 should be:   5.7018661316561092e-01   0x1.23ef7ff0539c5p-1
 difference:  1.1102230246251565e-16   0x1.0000000000000p-53
 ulp       :  1.0000
 max.ulp   :  0.0000
Failure: Test: atanh_towardzero (0x8.3f7d95aabaf7p-4)
Result:
 is:          5.7019248543911060e-01   0x1.23f044fac5997p-1
 should be:   5.7019248543911049e-01   0x1.23f044fac5996p-1
 difference:  1.1102230246251565e-16   0x1.0000000000000p-53
 ulp       :  1.0000
 max.ulp   :  0.0000
Failure: Test: atanh_towardzero (0x8.3f805380d6728p-4)
Result:
 is:          5.7019604623795527e-01   0x1.23f0bc75cd113p-1
 should be:   5.7019604623795516e-01   0x1.23f0bc75cd112p-1
 difference:  1.1102230246251565e-16   0x1.0000000000000p-53
 ulp       :  1.0000
 max.ulp   :  0.0000
Maximal error of `atanh_towardzero'
 is      : 1 ulp
 accepted: 0 ulp

Checked on x86_64-linux-gnu, x86_64-linux-gnu-v3, aarch64-linux-gnu,
and i686-linux-gnu.
---
 SHARED-FILES                     |   2 +-
 math/auto-libm-test-in           |   4 +
 math/auto-libm-test-out-atanh    | 276 +++++++++++++++++++++++++++++++
 sysdeps/ieee754/dbl-64/e_atanh.c |   6 +-
 4 files changed, 284 insertions(+), 4 deletions(-)

diff --git a/SHARED-FILES b/SHARED-FILES
index cced02d6a9..ec88062a2b 100644
--- a/SHARED-FILES
+++ b/SHARED-FILES
@@ -246,7 +246,7 @@ tzdata:
 core-math:
   # src/binary64/acosh/acosh.c, revision 6736002f
   sysdeps/ieee754/dbl-64/e_acosh.c
-  # src/binary64/atanh/atanh.c, revision 703d7487
+  # src/binary64/atanh/atanh.c, revision dc9465e7
   sysdeps/ieee754/dbl-64/e_atanh.c
   # src/binary64/tgamma/tgamma.c, revision 0f185e23
   sysdeps/ieee754/dbl-64/e_gamma_r.c
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 0af70373fc..ec07bef9b7 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -897,6 +897,10 @@ atanh 0x2.c1085p-4
 atanh 0x1p-500
 atanh 0x1p-5000
 atanh 0x1.658802e5e2da7p-2
+atanh 0x1.07ef2207678c8p-1
+atanh 0x1.07efb2b5575eep-1
+atanh 0x1.d12ed0af1a27fp-27
+atanh 0x1.07f00a701ace5p-1
 # the next value generates larger error bounds in libmvec/avx512 on x86_64
 # (binary32)
 atanh 0x1.f80094p-8
diff --git a/math/auto-libm-test-out-atanh b/math/auto-libm-test-out-atanh
index 757d08952d..f1e3e96ffa 100644
--- a/math/auto-libm-test-out-atanh
+++ b/math/auto-libm-test-out-atanh
@@ -3181,6 +3181,282 @@ atanh 0x1.658802e5e2da7p-2
 = atanh tonearest ibm128 0x5.96200b978b69cp-4 : 0x5.d4e627b45bea7fffffe2483036p-4 : inexact-ok
 = atanh towardzero ibm128 0x5.96200b978b69cp-4 : 0x5.d4e627b45bea7fffffe2483036p-4 : inexact-ok
 = atanh upward ibm128 0x5.96200b978b69cp-4 : 0x5.d4e627b45bea7fffffe2483038p-4 : inexact-ok
+atanh 0x1.07ef2207678c8p-1
+= atanh downward binary32 0x8.3f792p-4 : 0x9.1f7c1p-4 : inexact-ok
+= atanh tonearest binary32 0x8.3f792p-4 : 0x9.1f7c1p-4 : inexact-ok
+= atanh towardzero binary32 0x8.3f792p-4 : 0x9.1f7c1p-4 : inexact-ok
+= atanh upward binary32 0x8.3f792p-4 : 0x9.1f7c2p-4 : inexact-ok
+= atanh downward binary64 0x8.3f792p-4 : 0x9.1f7c14fc51528p-4 : inexact-ok
+= atanh tonearest binary64 0x8.3f792p-4 : 0x9.1f7c14fc5153p-4 : inexact-ok
+= atanh towardzero binary64 0x8.3f792p-4 : 0x9.1f7c14fc51528p-4 : inexact-ok
+= atanh upward binary64 0x8.3f792p-4 : 0x9.1f7c14fc5153p-4 : inexact-ok
+= atanh downward intel96 0x8.3f792p-4 : 0x9.1f7c14fc5152dbdp-4 : inexact-ok
+= atanh tonearest intel96 0x8.3f792p-4 : 0x9.1f7c14fc5152dbep-4 : inexact-ok
+= atanh towardzero intel96 0x8.3f792p-4 : 0x9.1f7c14fc5152dbdp-4 : inexact-ok
+= atanh upward intel96 0x8.3f792p-4 : 0x9.1f7c14fc5152dbep-4 : inexact-ok
+= atanh downward m68k96 0x8.3f792p-4 : 0x9.1f7c14fc5152dbdp-4 : inexact-ok
+= atanh tonearest m68k96 0x8.3f792p-4 : 0x9.1f7c14fc5152dbep-4 : inexact-ok
+= atanh towardzero m68k96 0x8.3f792p-4 : 0x9.1f7c14fc5152dbdp-4 : inexact-ok
+= atanh upward m68k96 0x8.3f792p-4 : 0x9.1f7c14fc5152dbep-4 : inexact-ok
+= atanh downward binary128 0x8.3f792p-4 : 0x9.1f7c14fc5152dbdf16d95c98525p-4 : inexact-ok
+= atanh tonearest binary128 0x8.3f792p-4 : 0x9.1f7c14fc5152dbdf16d95c985258p-4 : inexact-ok
+= atanh towardzero binary128 0x8.3f792p-4 : 0x9.1f7c14fc5152dbdf16d95c98525p-4 : inexact-ok
+= atanh upward binary128 0x8.3f792p-4 : 0x9.1f7c14fc5152dbdf16d95c985258p-4 : inexact-ok
+= atanh downward ibm128 0x8.3f792p-4 : 0x9.1f7c14fc5152dbdf16d95c985p-4 : inexact-ok
+= atanh tonearest ibm128 0x8.3f792p-4 : 0x9.1f7c14fc5152dbdf16d95c9854p-4 : inexact-ok
+= atanh towardzero ibm128 0x8.3f792p-4 : 0x9.1f7c14fc5152dbdf16d95c985p-4 : inexact-ok
+= atanh upward ibm128 0x8.3f792p-4 : 0x9.1f7c14fc5152dbdf16d95c9854p-4 : inexact-ok
+= atanh downward binary32 0x8.3f791p-4 : 0x9.1f7bfp-4 : inexact-ok
+= atanh tonearest binary32 0x8.3f791p-4 : 0x9.1f7cp-4 : inexact-ok
+= atanh towardzero binary32 0x8.3f791p-4 : 0x9.1f7bfp-4 : inexact-ok
+= atanh upward binary32 0x8.3f791p-4 : 0x9.1f7cp-4 : inexact-ok
+= atanh downward binary64 0x8.3f791p-4 : 0x9.1f7bff31f05e8p-4 : inexact-ok
+= atanh tonearest binary64 0x8.3f791p-4 : 0x9.1f7bff31f05e8p-4 : inexact-ok
+= atanh towardzero binary64 0x8.3f791p-4 : 0x9.1f7bff31f05e8p-4 : inexact-ok
+= atanh upward binary64 0x8.3f791p-4 : 0x9.1f7bff31f05fp-4 : inexact-ok
+= atanh downward intel96 0x8.3f791p-4 : 0x9.1f7bff31f05e96ap-4 : inexact-ok
+= atanh tonearest intel96 0x8.3f791p-4 : 0x9.1f7bff31f05e96ap-4 : inexact-ok
+= atanh towardzero intel96 0x8.3f791p-4 : 0x9.1f7bff31f05e96ap-4 : inexact-ok
+= atanh upward intel96 0x8.3f791p-4 : 0x9.1f7bff31f05e96bp-4 : inexact-ok
+= atanh downward m68k96 0x8.3f791p-4 : 0x9.1f7bff31f05e96ap-4 : inexact-ok
+= atanh tonearest m68k96 0x8.3f791p-4 : 0x9.1f7bff31f05e96ap-4 : inexact-ok
+= atanh towardzero m68k96 0x8.3f791p-4 : 0x9.1f7bff31f05e96ap-4 : inexact-ok
+= atanh upward m68k96 0x8.3f791p-4 : 0x9.1f7bff31f05e96bp-4 : inexact-ok
+= atanh downward binary128 0x8.3f791p-4 : 0x9.1f7bff31f05e96a0476b046a1a98p-4 : inexact-ok
+= atanh tonearest binary128 0x8.3f791p-4 : 0x9.1f7bff31f05e96a0476b046a1aap-4 : inexact-ok
+= atanh towardzero binary128 0x8.3f791p-4 : 0x9.1f7bff31f05e96a0476b046a1a98p-4 : inexact-ok
+= atanh upward binary128 0x8.3f791p-4 : 0x9.1f7bff31f05e96a0476b046a1aap-4 : inexact-ok
+= atanh downward ibm128 0x8.3f791p-4 : 0x9.1f7bff31f05e96a0476b046a18p-4 : inexact-ok
+= atanh tonearest ibm128 0x8.3f791p-4 : 0x9.1f7bff31f05e96a0476b046a1cp-4 : inexact-ok
+= atanh towardzero ibm128 0x8.3f791p-4 : 0x9.1f7bff31f05e96a0476b046a18p-4 : inexact-ok
+= atanh upward ibm128 0x8.3f791p-4 : 0x9.1f7bff31f05e96a0476b046a1cp-4 : inexact-ok
+= atanh downward binary64 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce28p-4 : inexact-ok
+= atanh tonearest binary64 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce3p-4 : inexact-ok
+= atanh towardzero binary64 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce28p-4 : inexact-ok
+= atanh upward binary64 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce3p-4 : inexact-ok
+= atanh downward intel96 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce2fffp-4 : inexact-ok
+= atanh tonearest intel96 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce3p-4 : inexact-ok
+= atanh towardzero intel96 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce2fffp-4 : inexact-ok
+= atanh upward intel96 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce3p-4 : inexact-ok
+= atanh downward m68k96 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce2fffp-4 : inexact-ok
+= atanh tonearest m68k96 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce3p-4 : inexact-ok
+= atanh towardzero m68k96 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce2fffp-4 : inexact-ok
+= atanh upward m68k96 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce3p-4 : inexact-ok
+= atanh downward binary128 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce2fffffff7a2a84498p-4 : inexact-ok
+= atanh tonearest binary128 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce2fffffff7a2a84498p-4 : inexact-ok
+= atanh towardzero binary128 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce2fffffff7a2a84498p-4 : inexact-ok
+= atanh upward binary128 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce2fffffff7a2a844ap-4 : inexact-ok
+= atanh downward ibm128 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce2fffffff7a2a844p-4 : inexact-ok
+= atanh tonearest ibm128 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce2fffffff7a2a844p-4 : inexact-ok
+= atanh towardzero ibm128 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce2fffffff7a2a844p-4 : inexact-ok
+= atanh upward ibm128 0x8.3f79103b3c64p-4 : 0x9.1f7bff829ce2fffffff7a2a848p-4 : inexact-ok
+atanh 0x1.07efb2b5575eep-1
+= atanh downward binary32 0x8.3f7dap-4 : 0x9.1f823p-4 : inexact-ok
+= atanh tonearest binary32 0x8.3f7dap-4 : 0x9.1f823p-4 : inexact-ok
+= atanh towardzero binary32 0x8.3f7dap-4 : 0x9.1f823p-4 : inexact-ok
+= atanh upward binary32 0x8.3f7dap-4 : 0x9.1f824p-4 : inexact-ok
+= atanh downward binary64 0x8.3f7dap-4 : 0x9.1f8235e8d01ep-4 : inexact-ok
+= atanh tonearest binary64 0x8.3f7dap-4 : 0x9.1f8235e8d01e8p-4 : inexact-ok
+= atanh towardzero binary64 0x8.3f7dap-4 : 0x9.1f8235e8d01ep-4 : inexact-ok
+= atanh upward binary64 0x8.3f7dap-4 : 0x9.1f8235e8d01e8p-4 : inexact-ok
+= atanh downward intel96 0x8.3f7dap-4 : 0x9.1f8235e8d01e785p-4 : inexact-ok
+= atanh tonearest intel96 0x8.3f7dap-4 : 0x9.1f8235e8d01e786p-4 : inexact-ok
+= atanh towardzero intel96 0x8.3f7dap-4 : 0x9.1f8235e8d01e785p-4 : inexact-ok
+= atanh upward intel96 0x8.3f7dap-4 : 0x9.1f8235e8d01e786p-4 : inexact-ok
+= atanh downward m68k96 0x8.3f7dap-4 : 0x9.1f8235e8d01e785p-4 : inexact-ok
+= atanh tonearest m68k96 0x8.3f7dap-4 : 0x9.1f8235e8d01e786p-4 : inexact-ok
+= atanh towardzero m68k96 0x8.3f7dap-4 : 0x9.1f8235e8d01e785p-4 : inexact-ok
+= atanh upward m68k96 0x8.3f7dap-4 : 0x9.1f8235e8d01e786p-4 : inexact-ok
+= atanh downward binary128 0x8.3f7dap-4 : 0x9.1f8235e8d01e785c535dc3482cdp-4 : inexact-ok
+= atanh tonearest binary128 0x8.3f7dap-4 : 0x9.1f8235e8d01e785c535dc3482cdp-4 : inexact-ok
+= atanh towardzero binary128 0x8.3f7dap-4 : 0x9.1f8235e8d01e785c535dc3482cdp-4 : inexact-ok
+= atanh upward binary128 0x8.3f7dap-4 : 0x9.1f8235e8d01e785c535dc3482cd8p-4 : inexact-ok
+= atanh downward ibm128 0x8.3f7dap-4 : 0x9.1f8235e8d01e785c535dc3482cp-4 : inexact-ok
+= atanh tonearest ibm128 0x8.3f7dap-4 : 0x9.1f8235e8d01e785c535dc3482cp-4 : inexact-ok
+= atanh towardzero ibm128 0x8.3f7dap-4 : 0x9.1f8235e8d01e785c535dc3482cp-4 : inexact-ok
+= atanh upward ibm128 0x8.3f7dap-4 : 0x9.1f8235e8d01e785c535dc3483p-4 : inexact-ok
+= atanh downward binary32 0x8.3f7d9p-4 : 0x9.1f822p-4 : inexact-ok
+= atanh tonearest binary32 0x8.3f7d9p-4 : 0x9.1f822p-4 : inexact-ok
+= atanh towardzero binary32 0x8.3f7d9p-4 : 0x9.1f822p-4 : inexact-ok
+= atanh upward binary32 0x8.3f7d9p-4 : 0x9.1f823p-4 : inexact-ok
+= atanh downward binary64 0x8.3f7d9p-4 : 0x9.1f82201e668fp-4 : inexact-ok
+= atanh tonearest binary64 0x8.3f7d9p-4 : 0x9.1f82201e668fp-4 : inexact-ok
+= atanh towardzero binary64 0x8.3f7d9p-4 : 0x9.1f82201e668fp-4 : inexact-ok
+= atanh upward binary64 0x8.3f7d9p-4 : 0x9.1f82201e668f8p-4 : inexact-ok
+= atanh downward intel96 0x8.3f7d9p-4 : 0x9.1f82201e668f3acp-4 : inexact-ok
+= atanh tonearest intel96 0x8.3f7d9p-4 : 0x9.1f82201e668f3adp-4 : inexact-ok
+= atanh towardzero intel96 0x8.3f7d9p-4 : 0x9.1f82201e668f3acp-4 : inexact-ok
+= atanh upward intel96 0x8.3f7d9p-4 : 0x9.1f82201e668f3adp-4 : inexact-ok
+= atanh downward m68k96 0x8.3f7d9p-4 : 0x9.1f82201e668f3acp-4 : inexact-ok
+= atanh tonearest m68k96 0x8.3f7d9p-4 : 0x9.1f82201e668f3adp-4 : inexact-ok
+= atanh towardzero m68k96 0x8.3f7d9p-4 : 0x9.1f82201e668f3acp-4 : inexact-ok
+= atanh upward m68k96 0x8.3f7d9p-4 : 0x9.1f82201e668f3adp-4 : inexact-ok
+= atanh downward binary128 0x8.3f7d9p-4 : 0x9.1f82201e668f3acb07be26a834p-4 : inexact-ok
+= atanh tonearest binary128 0x8.3f7d9p-4 : 0x9.1f82201e668f3acb07be26a83408p-4 : inexact-ok
+= atanh towardzero binary128 0x8.3f7d9p-4 : 0x9.1f82201e668f3acb07be26a834p-4 : inexact-ok
+= atanh upward binary128 0x8.3f7d9p-4 : 0x9.1f82201e668f3acb07be26a83408p-4 : inexact-ok
+= atanh downward ibm128 0x8.3f7d9p-4 : 0x9.1f82201e668f3acb07be26a834p-4 : inexact-ok
+= atanh tonearest ibm128 0x8.3f7d9p-4 : 0x9.1f82201e668f3acb07be26a834p-4 : inexact-ok
+= atanh towardzero ibm128 0x8.3f7d9p-4 : 0x9.1f82201e668f3acb07be26a834p-4 : inexact-ok
+= atanh upward ibm128 0x8.3f7d9p-4 : 0x9.1f82201e668f3acb07be26a838p-4 : inexact-ok
+= atanh downward binary64 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccbp-4 : inexact-ok
+= atanh tonearest binary64 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb8p-4 : inexact-ok
+= atanh towardzero binary64 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccbp-4 : inexact-ok
+= atanh upward binary64 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb8p-4 : inexact-ok
+= atanh downward intel96 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb7ffp-4 : inexact-ok
+= atanh tonearest intel96 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb8p-4 : inexact-ok
+= atanh towardzero intel96 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb7ffp-4 : inexact-ok
+= atanh upward intel96 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb8p-4 : inexact-ok
+= atanh downward m68k96 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb7ffp-4 : inexact-ok
+= atanh tonearest m68k96 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb8p-4 : inexact-ok
+= atanh towardzero m68k96 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb7ffp-4 : inexact-ok
+= atanh upward m68k96 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb8p-4 : inexact-ok
+= atanh downward binary128 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb7ffffffe9a438b28p-4 : inexact-ok
+= atanh tonearest binary128 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb7ffffffe9a438b28p-4 : inexact-ok
+= atanh towardzero binary128 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb7ffffffe9a438b28p-4 : inexact-ok
+= atanh upward binary128 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb7ffffffe9a438b3p-4 : inexact-ok
+= atanh downward ibm128 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb7ffffffe9a4388p-4 : inexact-ok
+= atanh tonearest ibm128 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb7ffffffe9a438cp-4 : inexact-ok
+= atanh towardzero ibm128 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb7ffffffe9a4388p-4 : inexact-ok
+= atanh upward ibm128 0x8.3f7d95aabaf7p-4 : 0x9.1f8227d62ccb7ffffffe9a438cp-4 : inexact-ok
+atanh 0x1.d12ed0af1a27fp-27
+= atanh downward binary32 0x3.a25da4p-28 : 0x3.a25da4p-28 : inexact-ok
+= atanh tonearest binary32 0x3.a25da4p-28 : 0x3.a25da4p-28 : inexact-ok
+= atanh towardzero binary32 0x3.a25da4p-28 : 0x3.a25da4p-28 : inexact-ok
+= atanh upward binary32 0x3.a25da4p-28 : 0x3.a25da8p-28 : inexact-ok
+= atanh downward binary64 0x3.a25da4p-28 : 0x3.a25da4p-28 : inexact-ok
+= atanh tonearest binary64 0x3.a25da4p-28 : 0x3.a25da40000002p-28 : inexact-ok
+= atanh towardzero binary64 0x3.a25da4p-28 : 0x3.a25da4p-28 : inexact-ok
+= atanh upward binary64 0x3.a25da4p-28 : 0x3.a25da40000002p-28 : inexact-ok
+= atanh downward intel96 0x3.a25da4p-28 : 0x3.a25da40000001p-28 : inexact-ok
+= atanh tonearest intel96 0x3.a25da4p-28 : 0x3.a25da40000001p-28 : inexact-ok
+= atanh towardzero intel96 0x3.a25da4p-28 : 0x3.a25da40000001p-28 : inexact-ok
+= atanh upward intel96 0x3.a25da4p-28 : 0x3.a25da40000001004p-28 : inexact-ok
+= atanh downward m68k96 0x3.a25da4p-28 : 0x3.a25da40000001p-28 : inexact-ok
+= atanh tonearest m68k96 0x3.a25da4p-28 : 0x3.a25da40000001p-28 : inexact-ok
+= atanh towardzero m68k96 0x3.a25da4p-28 : 0x3.a25da40000001p-28 : inexact-ok
+= atanh upward m68k96 0x3.a25da4p-28 : 0x3.a25da40000001004p-28 : inexact-ok
+= atanh downward binary128 0x3.a25da4p-28 : 0x3.a25da400000010000022c34c1ea4p-28 : inexact-ok
+= atanh tonearest binary128 0x3.a25da4p-28 : 0x3.a25da400000010000022c34c1ea4p-28 : inexact-ok
+= atanh towardzero binary128 0x3.a25da4p-28 : 0x3.a25da400000010000022c34c1ea4p-28 : inexact-ok
+= atanh upward binary128 0x3.a25da4p-28 : 0x3.a25da400000010000022c34c1ea6p-28 : inexact-ok
+= atanh downward ibm128 0x3.a25da4p-28 : 0x3.a25da400000010000022c34c1ep-28 : inexact-ok
+= atanh tonearest ibm128 0x3.a25da4p-28 : 0x3.a25da400000010000022c34c1fp-28 : inexact-ok
+= atanh towardzero ibm128 0x3.a25da4p-28 : 0x3.a25da400000010000022c34c1ep-28 : inexact-ok
+= atanh upward ibm128 0x3.a25da4p-28 : 0x3.a25da400000010000022c34c1fp-28 : inexact-ok
+= atanh downward binary32 0x3.a25dap-28 : 0x3.a25dap-28 : inexact-ok
+= atanh tonearest binary32 0x3.a25dap-28 : 0x3.a25dap-28 : inexact-ok
+= atanh towardzero binary32 0x3.a25dap-28 : 0x3.a25dap-28 : inexact-ok
+= atanh upward binary32 0x3.a25dap-28 : 0x3.a25da4p-28 : inexact-ok
+= atanh downward binary64 0x3.a25dap-28 : 0x3.a25dap-28 : inexact-ok
+= atanh tonearest binary64 0x3.a25dap-28 : 0x3.a25dap-28 : inexact-ok
+= atanh towardzero binary64 0x3.a25dap-28 : 0x3.a25dap-28 : inexact-ok
+= atanh upward binary64 0x3.a25dap-28 : 0x3.a25da00000002p-28 : inexact-ok
+= atanh downward intel96 0x3.a25dap-28 : 0x3.a25da00000000ffcp-28 : inexact-ok
+= atanh tonearest intel96 0x3.a25dap-28 : 0x3.a25da00000001p-28 : inexact-ok
+= atanh towardzero intel96 0x3.a25dap-28 : 0x3.a25da00000000ffcp-28 : inexact-ok
+= atanh upward intel96 0x3.a25dap-28 : 0x3.a25da00000001p-28 : inexact-ok
+= atanh downward m68k96 0x3.a25dap-28 : 0x3.a25da00000000ffcp-28 : inexact-ok
+= atanh tonearest m68k96 0x3.a25dap-28 : 0x3.a25da00000001p-28 : inexact-ok
+= atanh towardzero m68k96 0x3.a25dap-28 : 0x3.a25da00000000ffcp-28 : inexact-ok
+= atanh upward m68k96 0x3.a25dap-28 : 0x3.a25da00000001p-28 : inexact-ok
+= atanh downward binary128 0x3.a25dap-28 : 0x3.a25da00000000fffffedee9a6186p-28 : inexact-ok
+= atanh tonearest binary128 0x3.a25dap-28 : 0x3.a25da00000000fffffedee9a6188p-28 : inexact-ok
+= atanh towardzero binary128 0x3.a25dap-28 : 0x3.a25da00000000fffffedee9a6186p-28 : inexact-ok
+= atanh upward binary128 0x3.a25dap-28 : 0x3.a25da00000000fffffedee9a6188p-28 : inexact-ok
+= atanh downward ibm128 0x3.a25dap-28 : 0x3.a25da00000000fffffedee9a61p-28 : inexact-ok
+= atanh tonearest ibm128 0x3.a25dap-28 : 0x3.a25da00000000fffffedee9a62p-28 : inexact-ok
+= atanh towardzero ibm128 0x3.a25dap-28 : 0x3.a25da00000000fffffedee9a61p-28 : inexact-ok
+= atanh upward ibm128 0x3.a25dap-28 : 0x3.a25da00000000fffffedee9a62p-28 : inexact-ok
+= atanh downward binary64 0x3.a25da15e344fep-28 : 0x3.a25da15e344fep-28 : inexact-ok
+= atanh tonearest binary64 0x3.a25da15e344fep-28 : 0x3.a25da15e345p-28 : inexact-ok
+= atanh towardzero binary64 0x3.a25da15e344fep-28 : 0x3.a25da15e344fep-28 : inexact-ok
+= atanh upward binary64 0x3.a25da15e344fep-28 : 0x3.a25da15e345p-28 : inexact-ok
+= atanh downward intel96 0x3.a25da15e344fep-28 : 0x3.a25da15e344ffp-28 : inexact-ok
+= atanh tonearest intel96 0x3.a25da15e344fep-28 : 0x3.a25da15e344ffp-28 : inexact-ok
+= atanh towardzero intel96 0x3.a25da15e344fep-28 : 0x3.a25da15e344ffp-28 : inexact-ok
+= atanh upward intel96 0x3.a25da15e344fep-28 : 0x3.a25da15e344ff004p-28 : inexact-ok
+= atanh downward m68k96 0x3.a25da15e344fep-28 : 0x3.a25da15e344ffp-28 : inexact-ok
+= atanh tonearest m68k96 0x3.a25da15e344fep-28 : 0x3.a25da15e344ffp-28 : inexact-ok
+= atanh towardzero m68k96 0x3.a25da15e344fep-28 : 0x3.a25da15e344ffp-28 : inexact-ok
+= atanh upward m68k96 0x3.a25da15e344fep-28 : 0x3.a25da15e344ff004p-28 : inexact-ok
+= atanh downward binary128 0x3.a25da15e344fep-28 : 0x3.a25da15e344ff000000000000092p-28 : inexact-ok
+= atanh tonearest binary128 0x3.a25da15e344fep-28 : 0x3.a25da15e344ff000000000000092p-28 : inexact-ok
+= atanh towardzero binary128 0x3.a25da15e344fep-28 : 0x3.a25da15e344ff000000000000092p-28 : inexact-ok
+= atanh upward binary128 0x3.a25da15e344fep-28 : 0x3.a25da15e344ff000000000000094p-28 : inexact-ok
+= atanh downward ibm128 0x3.a25da15e344fep-28 : 0x3.a25da15e344ffp-28 : inexact-ok
+= atanh tonearest ibm128 0x3.a25da15e344fep-28 : 0x3.a25da15e344ff0000000000001p-28 : inexact-ok
+= atanh towardzero ibm128 0x3.a25da15e344fep-28 : 0x3.a25da15e344ffp-28 : inexact-ok
+= atanh upward ibm128 0x3.a25da15e344fep-28 : 0x3.a25da15e344ff0000000000001p-28 : inexact-ok
+atanh 0x1.07f00a701ace5p-1
+= atanh downward binary32 0x8.3f806p-4 : 0x9.1f85fp-4 : inexact-ok
+= atanh tonearest binary32 0x8.3f806p-4 : 0x9.1f85fp-4 : inexact-ok
+= atanh towardzero binary32 0x8.3f806p-4 : 0x9.1f85fp-4 : inexact-ok
+= atanh upward binary32 0x8.3f806p-4 : 0x9.1f86p-4 : inexact-ok
+= atanh downward binary64 0x8.3f806p-4 : 0x9.1f85f4b36b1p-4 : inexact-ok
+= atanh tonearest binary64 0x8.3f806p-4 : 0x9.1f85f4b36b108p-4 : inexact-ok
+= atanh towardzero binary64 0x8.3f806p-4 : 0x9.1f85f4b36b1p-4 : inexact-ok
+= atanh upward binary64 0x8.3f806p-4 : 0x9.1f85f4b36b108p-4 : inexact-ok
+= atanh downward intel96 0x8.3f806p-4 : 0x9.1f85f4b36b10535p-4 : inexact-ok
+= atanh tonearest intel96 0x8.3f806p-4 : 0x9.1f85f4b36b10535p-4 : inexact-ok
+= atanh towardzero intel96 0x8.3f806p-4 : 0x9.1f85f4b36b10535p-4 : inexact-ok
+= atanh upward intel96 0x8.3f806p-4 : 0x9.1f85f4b36b10536p-4 : inexact-ok
+= atanh downward m68k96 0x8.3f806p-4 : 0x9.1f85f4b36b10535p-4 : inexact-ok
+= atanh tonearest m68k96 0x8.3f806p-4 : 0x9.1f85f4b36b10535p-4 : inexact-ok
+= atanh towardzero m68k96 0x8.3f806p-4 : 0x9.1f85f4b36b10535p-4 : inexact-ok
+= atanh upward m68k96 0x8.3f806p-4 : 0x9.1f85f4b36b10536p-4 : inexact-ok
+= atanh downward binary128 0x8.3f806p-4 : 0x9.1f85f4b36b105352a9e9d0f11a98p-4 : inexact-ok
+= atanh tonearest binary128 0x8.3f806p-4 : 0x9.1f85f4b36b105352a9e9d0f11aap-4 : inexact-ok
+= atanh towardzero binary128 0x8.3f806p-4 : 0x9.1f85f4b36b105352a9e9d0f11a98p-4 : inexact-ok
+= atanh upward binary128 0x8.3f806p-4 : 0x9.1f85f4b36b105352a9e9d0f11aap-4 : inexact-ok
+= atanh downward ibm128 0x8.3f806p-4 : 0x9.1f85f4b36b105352a9e9d0f118p-4 : inexact-ok
+= atanh tonearest ibm128 0x8.3f806p-4 : 0x9.1f85f4b36b105352a9e9d0f11cp-4 : inexact-ok
+= atanh towardzero ibm128 0x8.3f806p-4 : 0x9.1f85f4b36b105352a9e9d0f118p-4 : inexact-ok
+= atanh upward ibm128 0x8.3f806p-4 : 0x9.1f85f4b36b105352a9e9d0f11cp-4 : inexact-ok
+= atanh downward binary32 0x8.3f805p-4 : 0x9.1f85dp-4 : inexact-ok
+= atanh tonearest binary32 0x8.3f805p-4 : 0x9.1f85ep-4 : inexact-ok
+= atanh towardzero binary32 0x8.3f805p-4 : 0x9.1f85dp-4 : inexact-ok
+= atanh upward binary32 0x8.3f805p-4 : 0x9.1f85ep-4 : inexact-ok
+= atanh downward binary64 0x8.3f805p-4 : 0x9.1f85dee8fc3e8p-4 : inexact-ok
+= atanh tonearest binary64 0x8.3f805p-4 : 0x9.1f85dee8fc3fp-4 : inexact-ok
+= atanh towardzero binary64 0x8.3f805p-4 : 0x9.1f85dee8fc3e8p-4 : inexact-ok
+= atanh upward binary64 0x8.3f805p-4 : 0x9.1f85dee8fc3fp-4 : inexact-ok
+= atanh downward intel96 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdap-4 : inexact-ok
+= atanh tonearest intel96 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdbp-4 : inexact-ok
+= atanh towardzero intel96 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdap-4 : inexact-ok
+= atanh upward intel96 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdbp-4 : inexact-ok
+= atanh downward m68k96 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdap-4 : inexact-ok
+= atanh tonearest m68k96 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdbp-4 : inexact-ok
+= atanh towardzero m68k96 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdap-4 : inexact-ok
+= atanh upward m68k96 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdbp-4 : inexact-ok
+= atanh downward binary128 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdadd2bb05dae258p-4 : inexact-ok
+= atanh tonearest binary128 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdadd2bb05dae26p-4 : inexact-ok
+= atanh towardzero binary128 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdadd2bb05dae258p-4 : inexact-ok
+= atanh upward binary128 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdadd2bb05dae26p-4 : inexact-ok
+= atanh downward ibm128 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdadd2bb05daep-4 : inexact-ok
+= atanh tonearest ibm128 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdadd2bb05dae4p-4 : inexact-ok
+= atanh towardzero ibm128 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdadd2bb05daep-4 : inexact-ok
+= atanh upward ibm128 0x8.3f805p-4 : 0x9.1f85dee8fc3ecdadd2bb05dae4p-4 : inexact-ok
+= atanh downward binary64 0x8.3f805380d6728p-4 : 0x9.1f85e3ae6889p-4 : inexact-ok
+= atanh tonearest binary64 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68898p-4 : inexact-ok
+= atanh towardzero binary64 0x8.3f805380d6728p-4 : 0x9.1f85e3ae6889p-4 : inexact-ok
+= atanh upward binary64 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68898p-4 : inexact-ok
+= atanh downward intel96 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68897ffp-4 : inexact-ok
+= atanh tonearest intel96 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68898p-4 : inexact-ok
+= atanh towardzero intel96 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68897ffp-4 : inexact-ok
+= atanh upward intel96 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68898p-4 : inexact-ok
+= atanh downward m68k96 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68897ffp-4 : inexact-ok
+= atanh tonearest m68k96 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68898p-4 : inexact-ok
+= atanh towardzero m68k96 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68897ffp-4 : inexact-ok
+= atanh upward m68k96 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68898p-4 : inexact-ok
+= atanh downward binary128 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68897fffffde6a6a384p-4 : inexact-ok
+= atanh tonearest binary128 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68897fffffde6a6a384p-4 : inexact-ok
+= atanh towardzero binary128 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68897fffffde6a6a384p-4 : inexact-ok
+= atanh upward binary128 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68897fffffde6a6a3848p-4 : inexact-ok
+= atanh downward ibm128 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68897fffffde6a6a38p-4 : inexact-ok
+= atanh tonearest ibm128 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68897fffffde6a6a38p-4 : inexact-ok
+= atanh towardzero ibm128 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68897fffffde6a6a38p-4 : inexact-ok
+= atanh upward ibm128 0x8.3f805380d6728p-4 : 0x9.1f85e3ae68897fffffde6a6a3cp-4 : inexact-ok
 atanh 0x1.f80094p-8
 = atanh downward binary32 0x1.f80094p-8 : 0x1.f8031ep-8 : inexact-ok
 = atanh tonearest binary32 0x1.f80094p-8 : 0x1.f8032p-8 : inexact-ok
diff --git a/sysdeps/ieee754/dbl-64/e_atanh.c b/sysdeps/ieee754/dbl-64/e_atanh.c
index 68ef87818d..77749ac2e0 100644
--- a/sysdeps/ieee754/dbl-64/e_atanh.c
+++ b/sysdeps/ieee754/dbl-64/e_atanh.c
@@ -3,7 +3,7 @@
 Copyright (c) 2023-2025 Alexei Sibidanov.
 
 The original version of this file was copied from the CORE-MATH
-project (file src/binary64/atanh/atanh.c, revision 703d7487).
+project (file src/binary64/atanh/atanh.c, revision dc9465e7).
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -103,7 +103,7 @@ __ieee754_atanh (double x)
       double p
 	  = (c[0] + x2 * c[1]) + x4 * (c[2] + x2 * c[3])
 	    + x8 * ((c[4] + x2 * c[5]) + x4 * (c[6] + x2 * c[7]) + x8 * c[8]);
-      double t = 0x1.5555555555555p-56 + x2 * p;
+      double t = fma (x2, p, 0x1.5555555555555p-56);
       double pl, ph = fasttwosum (0x1.5555555555555p-2, t, &pl);
       ph = muldd (ph, pl, x3, dx3, &pl);
       double tl;
@@ -147,7 +147,7 @@ __ieee754_atanh (double x)
   ll += f;
   lh *= copysign (1, x);
   ll *= copysign (1, x);
-  double eps = 34e-24 + dx2 * 0x1p-49;
+  double eps = 38e-24 + dx2 * 0x1p-49;
   double lb = lh + (ll - eps), ub = lh + (ll + eps);
   if (__glibc_likely (lb == ub))
     return lb;
-- 
2.43.0



More information about the Libc-alpha mailing list