]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
math: Sync atanh from CORE-MATH
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 26 Nov 2025 14:22:02 +0000 (11:22 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 26 Nov 2025 17:10:07 +0000 (14:10 -0300)
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
math/auto-libm-test-in
math/auto-libm-test-out-atanh
sysdeps/ieee754/dbl-64/e_atanh.c

index cced02d6a9a7f28124d35af4d3632109f6933c31..ec88062a2b9a23ef2ffe846dcd91d950c2ce3e97 100644 (file)
@@ -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
index 0af70373fcd78cd73465fa6fc8725e2e93615a04..ec07bef9b7ded43ce7e07a4fcdcc08702fdc69d6 100644 (file)
@@ -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
index 757d08952dab83a8e9b95d79977fe57bf7dad691..f1e3e96ffac78ef5d064cf5cd1182c5c139a295c 100644 (file)
@@ -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
index 68ef87818d809ac7e7d7b93df4553946aa3b69e3..77749ac2e0246e6119e1d37e42df6cd7ddf2619d 100644 (file)
@@ -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;