math: Sync atanh from CORE-MATH

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.
This commit is contained in:
Adhemerval Zanella 2025-11-26 11:22:02 -03:00
parent bc4bc1650b
commit a61f7fd59d
4 changed files with 284 additions and 4 deletions

View File

@ -246,7 +246,7 @@ tzdata:
core-math: core-math:
# src/binary64/acosh/acosh.c, revision 6736002f # src/binary64/acosh/acosh.c, revision 6736002f
sysdeps/ieee754/dbl-64/e_acosh.c 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 sysdeps/ieee754/dbl-64/e_atanh.c
# src/binary64/tgamma/tgamma.c, revision 0f185e23 # src/binary64/tgamma/tgamma.c, revision 0f185e23
sysdeps/ieee754/dbl-64/e_gamma_r.c sysdeps/ieee754/dbl-64/e_gamma_r.c

View File

@ -897,6 +897,10 @@ atanh 0x2.c1085p-4
atanh 0x1p-500 atanh 0x1p-500
atanh 0x1p-5000 atanh 0x1p-5000
atanh 0x1.658802e5e2da7p-2 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 # the next value generates larger error bounds in libmvec/avx512 on x86_64
# (binary32) # (binary32)
atanh 0x1.f80094p-8 atanh 0x1.f80094p-8

View File

@ -3181,6 +3181,282 @@ atanh 0x1.658802e5e2da7p-2
= atanh tonearest ibm128 0x5.96200b978b69cp-4 : 0x5.d4e627b45bea7fffffe2483036p-4 : inexact-ok = atanh tonearest ibm128 0x5.96200b978b69cp-4 : 0x5.d4e627b45bea7fffffe2483036p-4 : inexact-ok
= atanh towardzero 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 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 0x1.f80094p-8
= atanh downward binary32 0x1.f80094p-8 : 0x1.f8031ep-8 : inexact-ok = atanh downward binary32 0x1.f80094p-8 : 0x1.f8031ep-8 : inexact-ok
= atanh tonearest binary32 0x1.f80094p-8 : 0x1.f8032p-8 : inexact-ok = atanh tonearest binary32 0x1.f80094p-8 : 0x1.f8032p-8 : inexact-ok

View File

@ -3,7 +3,7 @@
Copyright (c) 2023-2025 Alexei Sibidanov. Copyright (c) 2023-2025 Alexei Sibidanov.
The original version of this file was copied from the CORE-MATH 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 Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@ -103,7 +103,7 @@ __ieee754_atanh (double x)
double p double p
= (c[0] + x2 * c[1]) + x4 * (c[2] + x2 * c[3]) = (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]); + 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); double pl, ph = fasttwosum (0x1.5555555555555p-2, t, &pl);
ph = muldd (ph, pl, x3, dx3, &pl); ph = muldd (ph, pl, x3, dx3, &pl);
double tl; double tl;
@ -147,7 +147,7 @@ __ieee754_atanh (double x)
ll += f; ll += f;
lh *= copysign (1, x); lh *= copysign (1, x);
ll *= 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); double lb = lh + (ll - eps), ub = lh + (ll + eps);
if (__glibc_likely (lb == ub)) if (__glibc_likely (lb == ub))
return lb; return lb;