]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
math: Sync atanh from CORE-MATH
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Fri, 9 Jan 2026 14:56:50 +0000 (11:56 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 12 Jan 2026 13:34:35 +0000 (10:34 -0300)
The CORE-MATH c423b9a3 commit made atanh to use a slight different
muldd_acc, mulddd, and polydd (which uses muldd_acc internally)
compare to asinh and acosh.

The new tests were suggested by Paul Zimmermann (although I did
not see any regression).

Checked on x86_64-linux-gnu, x86_64-linux-gnu-v3, aarch64-linux-gnu,
and i686-linux-gnu.

Reviewed-by: Paul Zimmermann <Paul.Zimmermann@inria.fr>
SHARED-FILES
math/auto-libm-test-in
math/auto-libm-test-out-atanh
sysdeps/ieee754/dbl-64/ddcoremath.h
sysdeps/ieee754/dbl-64/e_atanh.c
sysdeps/ieee754/dbl-64/s_atanh_data.c

index e4325b6e7fddc5fb3eb17289b7e51bf2350b3f26..4fcc66b2efe9a91656e5c826345fac2be58eb41c 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 dc9465e7
+  # src/binary64/atanh/atanh.c, revision c423b9a3
   sysdeps/ieee754/dbl-64/e_atanh.c
   # src/binary64/tgamma/tgamma.c, revision 0f185e23
   sysdeps/ieee754/dbl-64/e_gamma_r.c
index 0778834c22fdb6f2249eb5ac6b51b1a1c041b2bc..e27d51ba55c298987492f15d5d0224f22426536e 100644 (file)
@@ -916,6 +916,16 @@ atanh 0x1.07f00a701ace5p-1
 atanh 0x1.f80094p-8
 # the next value generates larger error bounds on x86_64 (binary128)
 atanh 0x2.c02a24f3472c7840afbd8cfb68bap-4
+atanh 0x1.ebf0a791a74bep-1
+atanh 0x1.ebf0a974933dp-1
+atanh 0x1.ebf0a992eabf2p-1
+atanh 0x1.ebf0adca5e78ep-1
+atanh 0x1.ebf0afcde5f31p-1
+atanh 0x1.ebf0b78af8d51p-1
+atanh 0x1.ebf0bdc2afd4p-1
+atanh 0x1.ebf0bfefa727dp-1
+atanh 0x1.f5deed6e671a1p-1
+atanh 0x1.f5def5fcaa8efp-1
 atanh min
 atanh -min
 atanh min_subnorm
index f1e3e96ffac78ef5d064cf5cd1182c5c139a295c..c910c8bc5f5019c38379964d21ce60866e244bb7 100644 (file)
@@ -3623,6 +3623,696 @@ atanh 0x2.c02a24f3472c7840afbd8cfb68bap-4
 = atanh tonearest ibm128 0x2.c02a24f3472c7840afbd8cfb68p-4 : 0x2.c73a3a9475b5a6198c97986c8ep-4 : inexact-ok
 = atanh towardzero ibm128 0x2.c02a24f3472c7840afbd8cfb68p-4 : 0x2.c73a3a9475b5a6198c97986c8ep-4 : inexact-ok
 = atanh upward ibm128 0x2.c02a24f3472c7840afbd8cfb68p-4 : 0x2.c73a3a9475b5a6198c97986c8fp-4 : inexact-ok
+atanh 0x1.ebf0a791a74bep-1
+= atanh downward binary32 0xf.5f854p-4 : 0x1.f4dbf8p+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f854p-4 : 0x1.f4dbf8p+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f854p-4 : 0x1.f4dbf8p+0 : inexact-ok
+= atanh upward binary32 0xf.5f854p-4 : 0x1.f4dbfap+0 : inexact-ok
+= atanh downward binary64 0xf.5f854p-4 : 0x1.f4dbf8943dd49p+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f854p-4 : 0x1.f4dbf8943dd4ap+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f854p-4 : 0x1.f4dbf8943dd49p+0 : inexact-ok
+= atanh upward binary64 0xf.5f854p-4 : 0x1.f4dbf8943dd4ap+0 : inexact-ok
+= atanh downward intel96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh upward intel96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb6p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh upward m68k96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb6p+0 : inexact-ok
+= atanh downward binary128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82212f4p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82212f5p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82212f4p+0 : inexact-ok
+= atanh upward binary128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82212f5p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b822128p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82213p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b822128p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82213p+0 : inexact-ok
+= atanh downward binary32 0xf.5f853p-4 : 0x1.f4dbeap+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f853p-4 : 0x1.f4dbecp+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f853p-4 : 0x1.f4dbeap+0 : inexact-ok
+= atanh upward binary32 0xf.5f853p-4 : 0x1.f4dbecp+0 : inexact-ok
+= atanh downward binary64 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fp+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f853p-4 : 0x1.f4dbeb8ff4b4p+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fp+0 : inexact-ok
+= atanh upward binary64 0xf.5f853p-4 : 0x1.f4dbeb8ff4b4p+0 : inexact-ok
+= atanh downward intel96 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa52p+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa54p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa52p+0 : inexact-ok
+= atanh upward intel96 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa54p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa52p+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa54p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa52p+0 : inexact-ok
+= atanh upward m68k96 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa54p+0 : inexact-ok
+= atanh downward binary128 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa53ab4b8ebb0b3ep+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa53ab4b8ebb0b3ep+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa53ab4b8ebb0b3ep+0 : inexact-ok
+= atanh upward binary128 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa53ab4b8ebb0b3fp+0 : inexact-ok
+= atanh downward ibm128 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa53ab4b8ebb0bp+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa53ab4b8ebb0bp+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa53ab4b8ebb0bp+0 : inexact-ok
+= atanh upward ibm128 0xf.5f853p-4 : 0x1.f4dbeb8ff4b3fa53ab4b8ebb0b8p+0 : inexact-ok
+= atanh downward binary64 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22p+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b23p+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22p+0 : inexact-ok
+= atanh upward binary64 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b23p+0 : inexact-ok
+= atanh downward intel96 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22ffep+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b23p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22ffep+0 : inexact-ok
+= atanh upward intel96 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b23p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22ffep+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b23p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22ffep+0 : inexact-ok
+= atanh upward m68k96 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b23p+0 : inexact-ok
+= atanh downward binary128 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22fffffffdddbece9p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22fffffffdddbece9p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22fffffffdddbece9p+0 : inexact-ok
+= atanh upward binary128 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22fffffffdddbeceap+0 : inexact-ok
+= atanh downward ibm128 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22fffffffdddbec8p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22fffffffdddbedp+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22fffffffdddbec8p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f853c8d3a5fp-4 : 0x1.f4dbf5c610b22fffffffdddbedp+0 : inexact-ok
+atanh 0x1.ebf0a974933dp-1
+= atanh downward binary32 0xf.5f855p-4 : 0x1.f4dc04p+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f855p-4 : 0x1.f4dc06p+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f855p-4 : 0x1.f4dc04p+0 : inexact-ok
+= atanh upward binary32 0xf.5f855p-4 : 0x1.f4dc06p+0 : inexact-ok
+= atanh downward binary64 0xf.5f855p-4 : 0x1.f4dc0598883adp+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f855p-4 : 0x1.f4dc0598883adp+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f855p-4 : 0x1.f4dc0598883adp+0 : inexact-ok
+= atanh upward binary64 0xf.5f855p-4 : 0x1.f4dc0598883aep+0 : inexact-ok
+= atanh downward intel96 0xf.5f855p-4 : 0x1.f4dc0598883ad756p+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f855p-4 : 0x1.f4dc0598883ad756p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f855p-4 : 0x1.f4dc0598883ad756p+0 : inexact-ok
+= atanh upward intel96 0xf.5f855p-4 : 0x1.f4dc0598883ad758p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f855p-4 : 0x1.f4dc0598883ad756p+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f855p-4 : 0x1.f4dc0598883ad756p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f855p-4 : 0x1.f4dc0598883ad756p+0 : inexact-ok
+= atanh upward m68k96 0xf.5f855p-4 : 0x1.f4dc0598883ad758p+0 : inexact-ok
+= atanh downward binary128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db134532p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db134533p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db134532p+0 : inexact-ok
+= atanh upward binary128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db134533p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db1345p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db1345p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db1345p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db13458p+0 : inexact-ok
+= atanh downward binary32 0xf.5f854p-4 : 0x1.f4dbf8p+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f854p-4 : 0x1.f4dbf8p+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f854p-4 : 0x1.f4dbf8p+0 : inexact-ok
+= atanh upward binary32 0xf.5f854p-4 : 0x1.f4dbfap+0 : inexact-ok
+= atanh downward binary64 0xf.5f854p-4 : 0x1.f4dbf8943dd49p+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f854p-4 : 0x1.f4dbf8943dd4ap+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f854p-4 : 0x1.f4dbf8943dd49p+0 : inexact-ok
+= atanh upward binary64 0xf.5f854p-4 : 0x1.f4dbf8943dd4ap+0 : inexact-ok
+= atanh downward intel96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh upward intel96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb6p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh upward m68k96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb6p+0 : inexact-ok
+= atanh downward binary128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82212f4p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82212f5p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82212f4p+0 : inexact-ok
+= atanh upward binary128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82212f5p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b822128p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82213p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b822128p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82213p+0 : inexact-ok
+= atanh downward binary64 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afp+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0bp+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afp+0 : inexact-ok
+= atanh upward binary64 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0bp+0 : inexact-ok
+= atanh downward intel96 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afffep+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0bp+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afffep+0 : inexact-ok
+= atanh upward intel96 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0bp+0 : inexact-ok
+= atanh downward m68k96 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afffep+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0bp+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afffep+0 : inexact-ok
+= atanh upward m68k96 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0bp+0 : inexact-ok
+= atanh downward binary128 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afffffffda4fe8c86p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afffffffda4fe8c87p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afffffffda4fe8c86p+0 : inexact-ok
+= atanh upward binary128 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afffffffda4fe8c87p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afffffffda4fe8c8p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afffffffda4fe8c8p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afffffffda4fe8c8p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f854ba499e8p-4 : 0x1.f4dc020d1a0afffffffda4fe8dp+0 : inexact-ok
+atanh 0x1.ebf0a992eabf2p-1
+= atanh downward binary32 0xf.5f855p-4 : 0x1.f4dc04p+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f855p-4 : 0x1.f4dc06p+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f855p-4 : 0x1.f4dc04p+0 : inexact-ok
+= atanh upward binary32 0xf.5f855p-4 : 0x1.f4dc06p+0 : inexact-ok
+= atanh downward binary64 0xf.5f855p-4 : 0x1.f4dc0598883adp+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f855p-4 : 0x1.f4dc0598883adp+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f855p-4 : 0x1.f4dc0598883adp+0 : inexact-ok
+= atanh upward binary64 0xf.5f855p-4 : 0x1.f4dc0598883aep+0 : inexact-ok
+= atanh downward intel96 0xf.5f855p-4 : 0x1.f4dc0598883ad756p+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f855p-4 : 0x1.f4dc0598883ad756p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f855p-4 : 0x1.f4dc0598883ad756p+0 : inexact-ok
+= atanh upward intel96 0xf.5f855p-4 : 0x1.f4dc0598883ad758p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f855p-4 : 0x1.f4dc0598883ad756p+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f855p-4 : 0x1.f4dc0598883ad756p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f855p-4 : 0x1.f4dc0598883ad756p+0 : inexact-ok
+= atanh upward m68k96 0xf.5f855p-4 : 0x1.f4dc0598883ad758p+0 : inexact-ok
+= atanh downward binary128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db134532p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db134533p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db134532p+0 : inexact-ok
+= atanh upward binary128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db134533p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db1345p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db1345p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db1345p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f855p-4 : 0x1.f4dc0598883ad756b1b9db13458p+0 : inexact-ok
+= atanh downward binary32 0xf.5f854p-4 : 0x1.f4dbf8p+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f854p-4 : 0x1.f4dbf8p+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f854p-4 : 0x1.f4dbf8p+0 : inexact-ok
+= atanh upward binary32 0xf.5f854p-4 : 0x1.f4dbfap+0 : inexact-ok
+= atanh downward binary64 0xf.5f854p-4 : 0x1.f4dbf8943dd49p+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f854p-4 : 0x1.f4dbf8943dd4ap+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f854p-4 : 0x1.f4dbf8943dd49p+0 : inexact-ok
+= atanh upward binary64 0xf.5f854p-4 : 0x1.f4dbf8943dd4ap+0 : inexact-ok
+= atanh downward intel96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh upward intel96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb6p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb4p+0 : inexact-ok
+= atanh upward m68k96 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb6p+0 : inexact-ok
+= atanh downward binary128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82212f4p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82212f5p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82212f4p+0 : inexact-ok
+= atanh upward binary128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82212f5p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b822128p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82213p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b822128p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f854p-4 : 0x1.f4dbf8943dd49cb47831b82213p+0 : inexact-ok
+= atanh downward binary64 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57p+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f58p+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57p+0 : inexact-ok
+= atanh upward binary64 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f58p+0 : inexact-ok
+= atanh downward intel96 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57ffep+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f58p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57ffep+0 : inexact-ok
+= atanh upward intel96 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f58p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57ffep+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f58p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57ffep+0 : inexact-ok
+= atanh upward m68k96 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f58p+0 : inexact-ok
+= atanh downward binary128 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57fffffffc3ab59a1p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57fffffffc3ab59a2p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57fffffffc3ab59a1p+0 : inexact-ok
+= atanh upward binary128 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57fffffffc3ab59a2p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57fffffffc3ab598p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57fffffffc3ab598p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57fffffffc3ab598p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f854c9755f9p-4 : 0x1.f4dc02d293f57fffffffc3ab5ap+0 : inexact-ok
+atanh 0x1.ebf0adca5e78ep-1
+= atanh downward binary32 0xf.5f857p-4 : 0x1.f4dc1ep+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f857p-4 : 0x1.f4dc2p+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f857p-4 : 0x1.f4dc1ep+0 : inexact-ok
+= atanh upward binary32 0xf.5f857p-4 : 0x1.f4dc2p+0 : inexact-ok
+= atanh downward binary64 0xf.5f857p-4 : 0x1.f4dc1fa120d81p+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f857p-4 : 0x1.f4dc1fa120d81p+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f857p-4 : 0x1.f4dc1fa120d81p+0 : inexact-ok
+= atanh upward binary64 0xf.5f857p-4 : 0x1.f4dc1fa120d82p+0 : inexact-ok
+= atanh downward intel96 0xf.5f857p-4 : 0x1.f4dc1fa120d81662p+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f857p-4 : 0x1.f4dc1fa120d81664p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f857p-4 : 0x1.f4dc1fa120d81662p+0 : inexact-ok
+= atanh upward intel96 0xf.5f857p-4 : 0x1.f4dc1fa120d81664p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f857p-4 : 0x1.f4dc1fa120d81662p+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f857p-4 : 0x1.f4dc1fa120d81664p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f857p-4 : 0x1.f4dc1fa120d81662p+0 : inexact-ok
+= atanh upward m68k96 0xf.5f857p-4 : 0x1.f4dc1fa120d81664p+0 : inexact-ok
+= atanh downward binary128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f52ep+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f52ep+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f52ep+0 : inexact-ok
+= atanh upward binary128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f52fp+0 : inexact-ok
+= atanh downward ibm128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f5p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f5p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f5p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f58p+0 : inexact-ok
+= atanh downward binary32 0xf.5f856p-4 : 0x1.f4dc12p+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f856p-4 : 0x1.f4dc12p+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f856p-4 : 0x1.f4dc12p+0 : inexact-ok
+= atanh upward binary32 0xf.5f856p-4 : 0x1.f4dc14p+0 : inexact-ok
+= atanh downward binary64 0xf.5f856p-4 : 0x1.f4dc129cd3e6ap+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f856p-4 : 0x1.f4dc129cd3e6bp+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f856p-4 : 0x1.f4dc129cd3e6ap+0 : inexact-ok
+= atanh upward binary64 0xf.5f856p-4 : 0x1.f4dc129cd3e6bp+0 : inexact-ok
+= atanh downward intel96 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7ap+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7cp+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7ap+0 : inexact-ok
+= atanh upward intel96 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7cp+0 : inexact-ok
+= atanh downward m68k96 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7ap+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7cp+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7ap+0 : inexact-ok
+= atanh upward m68k96 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7cp+0 : inexact-ok
+= atanh downward binary128 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7b4b5768b685b9p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7b4b5768b685bap+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7b4b5768b685b9p+0 : inexact-ok
+= atanh upward binary128 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7b4b5768b685bap+0 : inexact-ok
+= atanh downward ibm128 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7b4b5768b6858p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7b4b5768b6858p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7b4b5768b6858p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f856p-4 : 0x1.f4dc129cd3e6aa7b4b5768b686p+0 : inexact-ok
+= atanh downward binary64 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882p+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413883p+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882p+0 : inexact-ok
+= atanh upward binary64 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413883p+0 : inexact-ok
+= atanh downward intel96 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882ffep+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413883p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882ffep+0 : inexact-ok
+= atanh upward intel96 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413883p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882ffep+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413883p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882ffep+0 : inexact-ok
+= atanh upward m68k96 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413883p+0 : inexact-ok
+= atanh downward binary128 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882ffffffe62c9f3f9p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882ffffffe62c9f3fap+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882ffffffe62c9f3f9p+0 : inexact-ok
+= atanh upward binary128 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882ffffffe62c9f3fap+0 : inexact-ok
+= atanh downward ibm128 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882ffffffe62c9f38p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882ffffffe62c9f4p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882ffffffe62c9f38p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f856e52f3c7p-4 : 0x1.f4dc1e4413882ffffffe62c9f4p+0 : inexact-ok
+atanh 0x1.ebf0afcde5f31p-1
+= atanh downward binary32 0xf.5f858p-4 : 0x1.f4dc2cp+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f858p-4 : 0x1.f4dc2cp+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f858p-4 : 0x1.f4dc2cp+0 : inexact-ok
+= atanh upward binary32 0xf.5f858p-4 : 0x1.f4dc2ep+0 : inexact-ok
+= atanh downward binary64 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1p+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f858p-4 : 0x1.f4dc2ca56f0f2p+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1p+0 : inexact-ok
+= atanh upward binary64 0xf.5f858p-4 : 0x1.f4dc2ca56f0f2p+0 : inexact-ok
+= atanh downward intel96 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b4ep+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b5p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b4ep+0 : inexact-ok
+= atanh upward intel96 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b5p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b4ep+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b5p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b4ep+0 : inexact-ok
+= atanh upward m68k96 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b5p+0 : inexact-ok
+= atanh downward binary128 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b4f6d01ab46b07fp+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b4f6d01ab46b07fp+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b4f6d01ab46b07fp+0 : inexact-ok
+= atanh upward binary128 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b4f6d01ab46b08p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b4f6d01ab46bp+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b4f6d01ab46b08p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b4f6d01ab46bp+0 : inexact-ok
+= atanh upward ibm128 0xf.5f858p-4 : 0x1.f4dc2ca56f0f1b4f6d01ab46b08p+0 : inexact-ok
+= atanh downward binary32 0xf.5f857p-4 : 0x1.f4dc1ep+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f857p-4 : 0x1.f4dc2p+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f857p-4 : 0x1.f4dc1ep+0 : inexact-ok
+= atanh upward binary32 0xf.5f857p-4 : 0x1.f4dc2p+0 : inexact-ok
+= atanh downward binary64 0xf.5f857p-4 : 0x1.f4dc1fa120d81p+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f857p-4 : 0x1.f4dc1fa120d81p+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f857p-4 : 0x1.f4dc1fa120d81p+0 : inexact-ok
+= atanh upward binary64 0xf.5f857p-4 : 0x1.f4dc1fa120d82p+0 : inexact-ok
+= atanh downward intel96 0xf.5f857p-4 : 0x1.f4dc1fa120d81662p+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f857p-4 : 0x1.f4dc1fa120d81664p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f857p-4 : 0x1.f4dc1fa120d81662p+0 : inexact-ok
+= atanh upward intel96 0xf.5f857p-4 : 0x1.f4dc1fa120d81664p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f857p-4 : 0x1.f4dc1fa120d81662p+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f857p-4 : 0x1.f4dc1fa120d81664p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f857p-4 : 0x1.f4dc1fa120d81662p+0 : inexact-ok
+= atanh upward m68k96 0xf.5f857p-4 : 0x1.f4dc1fa120d81664p+0 : inexact-ok
+= atanh downward binary128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f52ep+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f52ep+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f52ep+0 : inexact-ok
+= atanh upward binary128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f52fp+0 : inexact-ok
+= atanh downward ibm128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f5p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f5p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f5p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f857p-4 : 0x1.f4dc1fa120d8166338913f82f58p+0 : inexact-ok
+= atanh downward binary64 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12p+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d13p+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12p+0 : inexact-ok
+= atanh upward binary64 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d13p+0 : inexact-ok
+= atanh downward intel96 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12ffep+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d13p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12ffep+0 : inexact-ok
+= atanh upward intel96 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d13p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12ffep+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d13p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12ffep+0 : inexact-ok
+= atanh upward m68k96 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d13p+0 : inexact-ok
+= atanh downward binary128 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12fffffff888d77b7p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12fffffff888d77b8p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12fffffff888d77b7p+0 : inexact-ok
+= atanh upward binary128 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12fffffff888d77b8p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12fffffff888d778p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12fffffff888d778p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12fffffff888d778p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f857e6f2f988p-4 : 0x1.f4dc2b5f59d12fffffff888d78p+0 : inexact-ok
+atanh 0x1.ebf0b78af8d51p-1
+= atanh downward binary32 0xf.5f85cp-4 : 0x1.f4dc6p+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f85cp-4 : 0x1.f4dc6p+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f85cp-4 : 0x1.f4dc6p+0 : inexact-ok
+= atanh upward binary32 0xf.5f85cp-4 : 0x1.f4dc62p+0 : inexact-ok
+= atanh downward binary64 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32p+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f85cp-4 : 0x1.f4dc60b6b4a33p+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32p+0 : inexact-ok
+= atanh upward binary64 0xf.5f85cp-4 : 0x1.f4dc60b6b4a33p+0 : inexact-ok
+= atanh downward intel96 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3ep+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3ep+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3ep+0 : inexact-ok
+= atanh upward intel96 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e4p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3ep+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3ep+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3ep+0 : inexact-ok
+= atanh upward m68k96 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e4p+0 : inexact-ok
+= atanh downward binary128 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3e119b0caf3433p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3e119b0caf3434p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3e119b0caf3433p+0 : inexact-ok
+= atanh upward binary128 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3e119b0caf3434p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3e119b0caf34p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3e119b0caf34p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3e119b0caf34p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f85cp-4 : 0x1.f4dc60b6b4a32e3e119b0caf348p+0 : inexact-ok
+= atanh downward binary32 0xf.5f85bp-4 : 0x1.f4dc52p+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f85bp-4 : 0x1.f4dc54p+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f85bp-4 : 0x1.f4dc52p+0 : inexact-ok
+= atanh upward binary32 0xf.5f85bp-4 : 0x1.f4dc54p+0 : inexact-ok
+= atanh downward binary64 0xf.5f85bp-4 : 0x1.f4dc53b26155cp+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f85bp-4 : 0x1.f4dc53b26155cp+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f85bp-4 : 0x1.f4dc53b26155cp+0 : inexact-ok
+= atanh upward binary64 0xf.5f85bp-4 : 0x1.f4dc53b26155dp+0 : inexact-ok
+= atanh downward intel96 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b6p+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b8p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b6p+0 : inexact-ok
+= atanh upward intel96 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b8p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b6p+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b8p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b6p+0 : inexact-ok
+= atanh upward m68k96 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b8p+0 : inexact-ok
+= atanh downward binary128 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b73ac4cb2646ddp+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b73ac4cb2646dep+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b73ac4cb2646ddp+0 : inexact-ok
+= atanh upward binary128 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b73ac4cb2646dep+0 : inexact-ok
+= atanh downward ibm128 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b73ac4cb26468p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b73ac4cb2647p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b73ac4cb26468p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f85bp-4 : 0x1.f4dc53b26155c2b73ac4cb2647p+0 : inexact-ok
+= atanh downward binary64 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6ap+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6bp+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6ap+0 : inexact-ok
+= atanh upward binary64 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6bp+0 : inexact-ok
+= atanh downward intel96 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6affep+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6bp+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6affep+0 : inexact-ok
+= atanh upward intel96 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6bp+0 : inexact-ok
+= atanh downward m68k96 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6affep+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6bp+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6affep+0 : inexact-ok
+= atanh upward m68k96 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6bp+0 : inexact-ok
+= atanh downward binary128 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6afffffff4f5cba29p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6afffffff4f5cba2ap+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6afffffff4f5cba29p+0 : inexact-ok
+= atanh upward binary128 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6afffffff4f5cba2ap+0 : inexact-ok
+= atanh downward ibm128 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6afffffff4f5cbap+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6afffffff4f5cbap+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6afffffff4f5cbap+0 : inexact-ok
+= atanh upward ibm128 0xf.5f85bc57c6a88p-4 : 0x1.f4dc5dbd08d6afffffff4f5cba8p+0 : inexact-ok
+atanh 0x1.ebf0bdc2afd4p-1
+= atanh downward binary32 0xf.5f85fp-4 : 0x1.f4dc86p+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f85fp-4 : 0x1.f4dc88p+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f85fp-4 : 0x1.f4dc86p+0 : inexact-ok
+= atanh upward binary32 0xf.5f85fp-4 : 0x1.f4dc88p+0 : inexact-ok
+= atanh downward binary64 0xf.5f85fp-4 : 0x1.f4dc87c3b62dp+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f85fp-4 : 0x1.f4dc87c3b62d1p+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f85fp-4 : 0x1.f4dc87c3b62dp+0 : inexact-ok
+= atanh upward binary64 0xf.5f85fp-4 : 0x1.f4dc87c3b62d1p+0 : inexact-ok
+= atanh downward intel96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8cp+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8cp+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8cp+0 : inexact-ok
+= atanh upward intel96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ep+0 : inexact-ok
+= atanh downward m68k96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8cp+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8cp+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8cp+0 : inexact-ok
+= atanh upward m68k96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ep+0 : inexact-ok
+= atanh downward binary128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a502c3p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a502c3p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a502c3p+0 : inexact-ok
+= atanh upward binary128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a502c4p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a5028p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a503p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a5028p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a503p+0 : inexact-ok
+= atanh downward binary32 0xf.5f85ep-4 : 0x1.f4dc7ap+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f85ep-4 : 0x1.f4dc7ap+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f85ep-4 : 0x1.f4dc7ap+0 : inexact-ok
+= atanh upward binary32 0xf.5f85ep-4 : 0x1.f4dc7cp+0 : inexact-ok
+= atanh downward binary64 0xf.5f85ep-4 : 0x1.f4dc7abf5f0edp+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f85ep-4 : 0x1.f4dc7abf5f0edp+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f85ep-4 : 0x1.f4dc7abf5f0edp+0 : inexact-ok
+= atanh upward binary64 0xf.5f85ep-4 : 0x1.f4dc7abf5f0eep+0 : inexact-ok
+= atanh downward intel96 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed466p+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed468p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed466p+0 : inexact-ok
+= atanh upward intel96 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed468p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed466p+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed468p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed466p+0 : inexact-ok
+= atanh upward m68k96 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed468p+0 : inexact-ok
+= atanh downward binary128 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed467d26ed7ad3b39p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed467d26ed7ad3b3ap+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed467d26ed7ad3b39p+0 : inexact-ok
+= atanh upward binary128 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed467d26ed7ad3b3ap+0 : inexact-ok
+= atanh downward ibm128 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed467d26ed7ad3bp+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed467d26ed7ad3bp+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed467d26ed7ad3bp+0 : inexact-ok
+= atanh upward ibm128 0xf.5f85ep-4 : 0x1.f4dc7abf5f0ed467d26ed7ad3b8p+0 : inexact-ok
+= atanh downward binary64 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecp+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eedp+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecp+0 : inexact-ok
+= atanh upward binary64 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eedp+0 : inexact-ok
+= atanh downward intel96 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecffep+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eedp+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecffep+0 : inexact-ok
+= atanh upward intel96 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eedp+0 : inexact-ok
+= atanh downward m68k96 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecffep+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eedp+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecffep+0 : inexact-ok
+= atanh upward m68k96 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eedp+0 : inexact-ok
+= atanh downward binary128 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecfffffff76818b21p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecfffffff76818b22p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecfffffff76818b21p+0 : inexact-ok
+= atanh upward binary128 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecfffffff76818b22p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecfffffff76818bp+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecfffffff76818bp+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecfffffff76818bp+0 : inexact-ok
+= atanh upward ibm128 0xf.5f85ee157eap-4 : 0x1.f4dc8634a7eecfffffff76818b8p+0 : inexact-ok
+atanh 0x1.ebf0bfefa727dp-1
+= atanh downward binary32 0xf.5f86p-4 : 0x1.f4dc94p+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f86p-4 : 0x1.f4dc94p+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f86p-4 : 0x1.f4dc94p+0 : inexact-ok
+= atanh upward binary32 0xf.5f86p-4 : 0x1.f4dc96p+0 : inexact-ok
+= atanh downward binary64 0xf.5f86p-4 : 0x1.f4dc94c80e90ep+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f86p-4 : 0x1.f4dc94c80e90ep+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f86p-4 : 0x1.f4dc94c80e90ep+0 : inexact-ok
+= atanh upward binary64 0xf.5f86p-4 : 0x1.f4dc94c80e90fp+0 : inexact-ok
+= atanh downward intel96 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bcp+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bep+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bcp+0 : inexact-ok
+= atanh upward intel96 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bep+0 : inexact-ok
+= atanh downward m68k96 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bcp+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bep+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bcp+0 : inexact-ok
+= atanh upward m68k96 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bep+0 : inexact-ok
+= atanh downward binary128 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bd5d908ee233ccp+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bd5d908ee233ccp+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bd5d908ee233ccp+0 : inexact-ok
+= atanh upward binary128 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bd5d908ee233cdp+0 : inexact-ok
+= atanh downward ibm128 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bd5d908ee2338p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bd5d908ee234p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bd5d908ee2338p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f86p-4 : 0x1.f4dc94c80e90e5bd5d908ee234p+0 : inexact-ok
+= atanh downward binary32 0xf.5f85fp-4 : 0x1.f4dc86p+0 : inexact-ok
+= atanh tonearest binary32 0xf.5f85fp-4 : 0x1.f4dc88p+0 : inexact-ok
+= atanh towardzero binary32 0xf.5f85fp-4 : 0x1.f4dc86p+0 : inexact-ok
+= atanh upward binary32 0xf.5f85fp-4 : 0x1.f4dc88p+0 : inexact-ok
+= atanh downward binary64 0xf.5f85fp-4 : 0x1.f4dc87c3b62dp+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f85fp-4 : 0x1.f4dc87c3b62d1p+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f85fp-4 : 0x1.f4dc87c3b62dp+0 : inexact-ok
+= atanh upward binary64 0xf.5f85fp-4 : 0x1.f4dc87c3b62d1p+0 : inexact-ok
+= atanh downward intel96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8cp+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8cp+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8cp+0 : inexact-ok
+= atanh upward intel96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ep+0 : inexact-ok
+= atanh downward m68k96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8cp+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8cp+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8cp+0 : inexact-ok
+= atanh upward m68k96 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ep+0 : inexact-ok
+= atanh downward binary128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a502c3p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a502c3p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a502c3p+0 : inexact-ok
+= atanh upward binary128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a502c4p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a5028p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a503p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a5028p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f85fp-4 : 0x1.f4dc87c3b62d0f8ca49d87a503p+0 : inexact-ok
+= atanh downward binary64 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7p+0 : inexact-ok
+= atanh tonearest binary64 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a8p+0 : inexact-ok
+= atanh towardzero binary64 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7p+0 : inexact-ok
+= atanh upward binary64 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a8p+0 : inexact-ok
+= atanh downward intel96 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7ffep+0 : inexact-ok
+= atanh tonearest intel96 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a8p+0 : inexact-ok
+= atanh towardzero intel96 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7ffep+0 : inexact-ok
+= atanh upward intel96 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a8p+0 : inexact-ok
+= atanh downward m68k96 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7ffep+0 : inexact-ok
+= atanh tonearest m68k96 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a8p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7ffep+0 : inexact-ok
+= atanh upward m68k96 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a8p+0 : inexact-ok
+= atanh downward binary128 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7fffffffe6127505p+0 : inexact-ok
+= atanh tonearest binary128 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7fffffffe6127505p+0 : inexact-ok
+= atanh towardzero binary128 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7fffffffe6127505p+0 : inexact-ok
+= atanh upward binary128 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7fffffffe6127506p+0 : inexact-ok
+= atanh downward ibm128 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7fffffffe61275p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7fffffffe61275p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7fffffffe61275p+0 : inexact-ok
+= atanh upward ibm128 0xf.5f85ff7d393e8p-4 : 0x1.f4dc945da98a7fffffffe612758p+0 : inexact-ok
+atanh 0x1.f5deed6e671a1p-1
+= atanh downward binary32 0xf.aef77p-4 : 0x2.4d9504p+0 : inexact-ok
+= atanh tonearest binary32 0xf.aef77p-4 : 0x2.4d9504p+0 : inexact-ok
+= atanh towardzero binary32 0xf.aef77p-4 : 0x2.4d9504p+0 : inexact-ok
+= atanh upward binary32 0xf.aef77p-4 : 0x2.4d9508p+0 : inexact-ok
+= atanh downward binary64 0xf.aef77p-4 : 0x2.4d9505e4c948ep+0 : inexact-ok
+= atanh tonearest binary64 0xf.aef77p-4 : 0x2.4d9505e4c949p+0 : inexact-ok
+= atanh towardzero binary64 0xf.aef77p-4 : 0x2.4d9505e4c948ep+0 : inexact-ok
+= atanh upward binary64 0xf.aef77p-4 : 0x2.4d9505e4c949p+0 : inexact-ok
+= atanh downward intel96 0xf.aef77p-4 : 0x2.4d9505e4c948f7fp+0 : inexact-ok
+= atanh tonearest intel96 0xf.aef77p-4 : 0x2.4d9505e4c948f7f4p+0 : inexact-ok
+= atanh towardzero intel96 0xf.aef77p-4 : 0x2.4d9505e4c948f7fp+0 : inexact-ok
+= atanh upward intel96 0xf.aef77p-4 : 0x2.4d9505e4c948f7f4p+0 : inexact-ok
+= atanh downward m68k96 0xf.aef77p-4 : 0x2.4d9505e4c948f7fp+0 : inexact-ok
+= atanh tonearest m68k96 0xf.aef77p-4 : 0x2.4d9505e4c948f7f4p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.aef77p-4 : 0x2.4d9505e4c948f7fp+0 : inexact-ok
+= atanh upward m68k96 0xf.aef77p-4 : 0x2.4d9505e4c948f7f4p+0 : inexact-ok
+= atanh downward binary128 0xf.aef77p-4 : 0x2.4d9505e4c948f7f2088bcb1ed89ap+0 : inexact-ok
+= atanh tonearest binary128 0xf.aef77p-4 : 0x2.4d9505e4c948f7f2088bcb1ed89cp+0 : inexact-ok
+= atanh towardzero binary128 0xf.aef77p-4 : 0x2.4d9505e4c948f7f2088bcb1ed89ap+0 : inexact-ok
+= atanh upward binary128 0xf.aef77p-4 : 0x2.4d9505e4c948f7f2088bcb1ed89cp+0 : inexact-ok
+= atanh downward ibm128 0xf.aef77p-4 : 0x2.4d9505e4c948f7f2088bcb1ed8p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.aef77p-4 : 0x2.4d9505e4c948f7f2088bcb1ed9p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.aef77p-4 : 0x2.4d9505e4c948f7f2088bcb1ed8p+0 : inexact-ok
+= atanh upward ibm128 0xf.aef77p-4 : 0x2.4d9505e4c948f7f2088bcb1ed9p+0 : inexact-ok
+= atanh downward binary32 0xf.aef76p-4 : 0x2.4d94ecp+0 : inexact-ok
+= atanh tonearest binary32 0xf.aef76p-4 : 0x2.4d94ecp+0 : inexact-ok
+= atanh towardzero binary32 0xf.aef76p-4 : 0x2.4d94ecp+0 : inexact-ok
+= atanh upward binary32 0xf.aef76p-4 : 0x2.4d94fp+0 : inexact-ok
+= atanh downward binary64 0xf.aef76p-4 : 0x2.4d94ec5e230dp+0 : inexact-ok
+= atanh tonearest binary64 0xf.aef76p-4 : 0x2.4d94ec5e230d2p+0 : inexact-ok
+= atanh towardzero binary64 0xf.aef76p-4 : 0x2.4d94ec5e230dp+0 : inexact-ok
+= atanh upward binary64 0xf.aef76p-4 : 0x2.4d94ec5e230d2p+0 : inexact-ok
+= atanh downward intel96 0xf.aef76p-4 : 0x2.4d94ec5e230d1a98p+0 : inexact-ok
+= atanh tonearest intel96 0xf.aef76p-4 : 0x2.4d94ec5e230d1a9cp+0 : inexact-ok
+= atanh towardzero intel96 0xf.aef76p-4 : 0x2.4d94ec5e230d1a98p+0 : inexact-ok
+= atanh upward intel96 0xf.aef76p-4 : 0x2.4d94ec5e230d1a9cp+0 : inexact-ok
+= atanh downward m68k96 0xf.aef76p-4 : 0x2.4d94ec5e230d1a98p+0 : inexact-ok
+= atanh tonearest m68k96 0xf.aef76p-4 : 0x2.4d94ec5e230d1a9cp+0 : inexact-ok
+= atanh towardzero m68k96 0xf.aef76p-4 : 0x2.4d94ec5e230d1a98p+0 : inexact-ok
+= atanh upward m68k96 0xf.aef76p-4 : 0x2.4d94ec5e230d1a9cp+0 : inexact-ok
+= atanh downward binary128 0xf.aef76p-4 : 0x2.4d94ec5e230d1a9aa291440de2a2p+0 : inexact-ok
+= atanh tonearest binary128 0xf.aef76p-4 : 0x2.4d94ec5e230d1a9aa291440de2a4p+0 : inexact-ok
+= atanh towardzero binary128 0xf.aef76p-4 : 0x2.4d94ec5e230d1a9aa291440de2a2p+0 : inexact-ok
+= atanh upward binary128 0xf.aef76p-4 : 0x2.4d94ec5e230d1a9aa291440de2a4p+0 : inexact-ok
+= atanh downward ibm128 0xf.aef76p-4 : 0x2.4d94ec5e230d1a9aa291440de2p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.aef76p-4 : 0x2.4d94ec5e230d1a9aa291440de3p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.aef76p-4 : 0x2.4d94ec5e230d1a9aa291440de2p+0 : inexact-ok
+= atanh upward ibm128 0xf.aef76p-4 : 0x2.4d94ec5e230d1a9aa291440de3p+0 : inexact-ok
+= atanh downward binary64 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742ep+0 : inexact-ok
+= atanh tonearest binary64 0xf.aef76b7338d08p-4 : 0x2.4d94fea28743p+0 : inexact-ok
+= atanh towardzero binary64 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742ep+0 : inexact-ok
+= atanh upward binary64 0xf.aef76b7338d08p-4 : 0x2.4d94fea28743p+0 : inexact-ok
+= atanh downward intel96 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742fffcp+0 : inexact-ok
+= atanh tonearest intel96 0xf.aef76b7338d08p-4 : 0x2.4d94fea28743p+0 : inexact-ok
+= atanh towardzero intel96 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742fffcp+0 : inexact-ok
+= atanh upward intel96 0xf.aef76b7338d08p-4 : 0x2.4d94fea28743p+0 : inexact-ok
+= atanh downward m68k96 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742fffcp+0 : inexact-ok
+= atanh tonearest m68k96 0xf.aef76b7338d08p-4 : 0x2.4d94fea28743p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742fffcp+0 : inexact-ok
+= atanh upward m68k96 0xf.aef76b7338d08p-4 : 0x2.4d94fea28743p+0 : inexact-ok
+= atanh downward binary128 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742fffffffdd0f6766ep+0 : inexact-ok
+= atanh tonearest binary128 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742fffffffdd0f6767p+0 : inexact-ok
+= atanh towardzero binary128 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742fffffffdd0f6766ep+0 : inexact-ok
+= atanh upward binary128 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742fffffffdd0f6767p+0 : inexact-ok
+= atanh downward ibm128 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742fffffffdd0f676p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742fffffffdd0f676p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742fffffffdd0f676p+0 : inexact-ok
+= atanh upward ibm128 0xf.aef76b7338d08p-4 : 0x2.4d94fea28742fffffffdd0f677p+0 : inexact-ok
+atanh 0x1.f5def5fcaa8efp-1
+= atanh downward binary32 0xf.aef7bp-4 : 0x2.4d9568p+0 : inexact-ok
+= atanh tonearest binary32 0xf.aef7bp-4 : 0x2.4d956cp+0 : inexact-ok
+= atanh towardzero binary32 0xf.aef7bp-4 : 0x2.4d9568p+0 : inexact-ok
+= atanh upward binary32 0xf.aef7bp-4 : 0x2.4d956cp+0 : inexact-ok
+= atanh downward binary64 0xf.aef7bp-4 : 0x2.4d956bff941e2p+0 : inexact-ok
+= atanh tonearest binary64 0xf.aef7bp-4 : 0x2.4d956bff941e4p+0 : inexact-ok
+= atanh towardzero binary64 0xf.aef7bp-4 : 0x2.4d956bff941e2p+0 : inexact-ok
+= atanh upward binary64 0xf.aef7bp-4 : 0x2.4d956bff941e4p+0 : inexact-ok
+= atanh downward intel96 0xf.aef7bp-4 : 0x2.4d956bff941e3d5p+0 : inexact-ok
+= atanh tonearest intel96 0xf.aef7bp-4 : 0x2.4d956bff941e3d5p+0 : inexact-ok
+= atanh towardzero intel96 0xf.aef7bp-4 : 0x2.4d956bff941e3d5p+0 : inexact-ok
+= atanh upward intel96 0xf.aef7bp-4 : 0x2.4d956bff941e3d54p+0 : inexact-ok
+= atanh downward m68k96 0xf.aef7bp-4 : 0x2.4d956bff941e3d5p+0 : inexact-ok
+= atanh tonearest m68k96 0xf.aef7bp-4 : 0x2.4d956bff941e3d5p+0 : inexact-ok
+= atanh towardzero m68k96 0xf.aef7bp-4 : 0x2.4d956bff941e3d5p+0 : inexact-ok
+= atanh upward m68k96 0xf.aef7bp-4 : 0x2.4d956bff941e3d54p+0 : inexact-ok
+= atanh downward binary128 0xf.aef7bp-4 : 0x2.4d956bff941e3d514fc70d3533e4p+0 : inexact-ok
+= atanh tonearest binary128 0xf.aef7bp-4 : 0x2.4d956bff941e3d514fc70d3533e4p+0 : inexact-ok
+= atanh towardzero binary128 0xf.aef7bp-4 : 0x2.4d956bff941e3d514fc70d3533e4p+0 : inexact-ok
+= atanh upward binary128 0xf.aef7bp-4 : 0x2.4d956bff941e3d514fc70d3533e6p+0 : inexact-ok
+= atanh downward ibm128 0xf.aef7bp-4 : 0x2.4d956bff941e3d514fc70d3533p+0 : inexact-ok
+= atanh tonearest ibm128 0xf.aef7bp-4 : 0x2.4d956bff941e3d514fc70d3534p+0 : inexact-ok
+= atanh towardzero ibm128 0xf.aef7bp-4 : 0x2.4d956bff941e3d514fc70d3533p+0 : inexact-ok
+= atanh upward ibm128 0xf.aef7bp-4 : 0x2.4d956bff941e3d514fc70d3534p+0 : inexact-ok
+= atanh downward binary32 0xf.aef7ap-4 : 0x2.4d955p+0 : inexact-ok
+= atanh tonearest binary32 0xf.aef7ap-4 : 0x2.4d9554p+0 : inexact-ok
+= atanh towardzero binary32 0xf.aef7ap-4 : 0x2.4d955p+0 : inexact-ok
+= atanh upward binary32 0xf.aef7ap-4 : 0x2.4d9554p+0 : inexact-ok
+= atanh downward binary64 0xf.aef7ap-4 : 0x2.4d955278d9eccp+0 : inexact-ok
+= atanh tonearest binary64 0xf.aef7ap-4 : 0x2.4d955278d9ecep+0 : inexact-ok
+= atanh towardzero binary64 0xf.aef7ap-4 : 0x2.4d955278d9eccp+0 : inexact-ok
+= atanh upward binary64 0xf.aef7ap-4 : 0x2.4d955278d9ecep+0 : inexact-ok
+= atanh downward intel96 0xf.aef7ap-4 : 0x2.4d955278d9ecd5ap+0 : inexact-ok
+= atanh tonearest intel96 0xf.aef7ap-4 : 0x2.4d955278d9ecd5ap+0 : inexact-ok
+= atanh towardzero intel96 0xf.aef7ap-4 : 0x2.4d955278d9ecd5ap+0 : inexact-ok
+= atanh upward intel96 0xf.aef7ap-4 : 0x2.4d955278d9ecd5a4p+0 : inexact-ok
+= atanh downward m68k96 0xf.aef7ap-4 : 0x2.4d955278d9ecd5ap+0 : inexact-ok
+= atanh tonearest m68k96 0xf.aef7ap-4 : 0x2.4d955278d9ecd5ap+0 : inexact-ok
+= atanh towardzero m68k96 0xf.aef7ap-4 : 0x2.4d955278d9ecd5ap+0 : inexact-ok
+= atanh upward m68k96 0xf.aef7ap-4 : 0x2.4d955278d9ecd5a4p+0 : inexact-ok
+= atanh downward binary128 0xf.aef7ap-4 : 0x2.4d955278d9ecd5a1db946644fc12p+0 : inexact-ok
+= atanh tonearest binary128 0xf.aef7ap-4 : 0x2.4d955278d9ecd5a1db946644fc12p+0 : inexact-ok
+= atanh towardzero binary128 0xf.aef7ap-4 : 0x2.4d955278d9ecd5a1db946644fc12p+0 : inexact-ok
+= atanh upward binary128 0xf.aef7ap-4 : 0x2.4d955278d9ecd5a1db946644fc14p+0 : inexact-ok
+= atanh downward ibm128 0xf.aef7ap-4 : 0x2.4d955278d9ecd5a1db946644fcp+0 : inexact-ok
+= atanh tonearest ibm128 0xf.aef7ap-4 : 0x2.4d955278d9ecd5a1db946644fcp+0 : inexact-ok
+= atanh towardzero ibm128 0xf.aef7ap-4 : 0x2.4d955278d9ecd5a1db946644fcp+0 : inexact-ok
+= atanh upward ibm128 0xf.aef7ap-4 : 0x2.4d955278d9ecd5a1db946644fdp+0 : inexact-ok
+= atanh downward binary64 0xf.aef7afe554778p-4 : 0x2.4d956bd50781cp+0 : inexact-ok
+= atanh tonearest binary64 0xf.aef7afe554778p-4 : 0x2.4d956bd50781ep+0 : inexact-ok
+= atanh towardzero binary64 0xf.aef7afe554778p-4 : 0x2.4d956bd50781cp+0 : inexact-ok
+= atanh upward binary64 0xf.aef7afe554778p-4 : 0x2.4d956bd50781ep+0 : inexact-ok
+= atanh downward intel96 0xf.aef7afe554778p-4 : 0x2.4d956bd50781dffcp+0 : inexact-ok
+= atanh tonearest intel96 0xf.aef7afe554778p-4 : 0x2.4d956bd50781ep+0 : inexact-ok
+= atanh towardzero intel96 0xf.aef7afe554778p-4 : 0x2.4d956bd50781dffcp+0 : inexact-ok
+= atanh upward intel96 0xf.aef7afe554778p-4 : 0x2.4d956bd50781ep+0 : inexact-ok
+= atanh downward m68k96 0xf.aef7afe554778p-4 : 0x2.4d956bd50781dffcp+0 : inexact-ok
+= atanh tonearest m68k96 0xf.aef7afe554778p-4 : 0x2.4d956bd50781ep+0 : inexact-ok
+= atanh towardzero m68k96 0xf.aef7afe554778p-4 : 0x2.4d956bd50781dffcp+0 : inexact-ok
+= atanh upward m68k96 0xf.aef7afe554778p-4 : 0x2.4d956bd50781ep+0 : inexact-ok
+= atanh downward binary128 0xf.aef7afe554778p-4 : 0x2.4d956bd50781dfffffffcec63d16p+0 : inexact-ok
+= atanh tonearest binary128 0xf.aef7afe554778p-4 : 0x2.4d956bd50781dfffffffcec63d18p+0 : inexact-ok
+= atanh towardzero binary128 0xf.aef7afe554778p-4 : 0x2.4d956bd50781dfffffffcec63d16p+0 : inexact-ok
+= atanh upward binary128 0xf.aef7afe554778p-4 : 0x2.4d956bd50781dfffffffcec63d18p+0 : inexact-ok
+= atanh downward ibm128 0xf.aef7afe554778p-4 : 0x2.4d956bd50781dfffffffcec63dp+0 : inexact-ok
+= atanh tonearest ibm128 0xf.aef7afe554778p-4 : 0x2.4d956bd50781dfffffffcec63dp+0 : inexact-ok
+= atanh towardzero ibm128 0xf.aef7afe554778p-4 : 0x2.4d956bd50781dfffffffcec63dp+0 : inexact-ok
+= atanh upward ibm128 0xf.aef7afe554778p-4 : 0x2.4d956bd50781dfffffffcec63ep+0 : inexact-ok
 atanh min
 = atanh downward binary32 0x4p-128 : 0x4p-128 : inexact-ok underflow-ok errno-erange-ok
 = atanh tonearest binary32 0x4p-128 : 0x4p-128 : inexact-ok underflow-ok errno-erange-ok
index c451199061ee7162d0872b77a4789b3154945251..ffb16feb4eff60598b2004ad0f3cca948597fd78 100644 (file)
@@ -102,6 +102,33 @@ muldd_acc (double xh, double xl, double ch, double cl, double *l)
   return ch;
 }
 
+/* Note: in revision 085972b, we replaced the last two lines
+   ch = ahhh + ahhl and *l = (ahhh - ch) + ahhl by fasttwosum (ahhh, ahhl, l).
+   Indeed, these last two lines did emulate a FastTwoSum.
+   However, they did emulate another variant of fasttwosum, with
+   z = x - s and e = z + y.
+   Note that these two variants differ when the fasttwosum condition
+   |x| >= |y| is not satisfied.
+   Take for example with precision 3 and rounding upwards, x=-7 and
+   y=28. Then s = RU(x + y) = 24. With the first variant, z = RU(s-x) = 32
+   and e = RU(y - z) = -4, thus s + e = 20. With the second variant,
+   z = RU(x-s) = -28 and e = RU(z + y) = 0, thus s + e = 24. In this case,
+   the first variant is closer to the sum x + y = 21.
+   Still with precision 3 and rounding upwards, now take x=7 and
+   y=-28. Then s = RU(x + y) = -20. With the first variant, z = RU(s-x) = -24
+   and e = RU(y - z) = -4, thus s + e = -28. With the second variant,
+   z = RU(x-s) = 28 and e = RU(z + y) = 0, thus s + e = -20. In this case,
+   the second variant is closer to the sum x + y = -21.
+*/
+static inline double
+muldd_acc2 (double xh, double xl, double ch, double cl, double *l)
+{
+ double ahlh = ch * xl, alhh = cl * xh, ahhh = ch * xh,
+       ahhl = fma (ch, xh, -ahhh);
+ ahhl += alhh + ahlh;
+ return fasttwosum (ahhh, ahhl, l);
+}
+
 static inline double
 muldd2 (double xh, double xl, double ch, double cl, double *l)
 {
@@ -139,11 +166,20 @@ mulddd2 (double x, double ch, double cl, double *l)
   return ahhh;
 }
 
+static inline double mulddd3 (double xh, double xl, double ch, double *l)
+{
+  double hh = xh * ch;
+  *l = fma (ch, xh, -hh) + xl * ch;
+  return hh;
+}
+
 static inline double
 polydd (double xh, double xl, int n, const double c[][2], double *l)
 {
   int i = n - 1;
-  double ch = c[i][0] + *l, cl = ((c[i][0] - ch) + *l) + c[i][1];
+  double ch, cl;
+  ch = fasttwosum (c[i][0], *l, &cl);
+  cl += c[i][1];
   while (--i >= 0)
     {
       ch = muldd_acc (xh, xl, ch, cl, &cl);
@@ -170,6 +206,24 @@ polydd2 (double xh, double xl, int n, const double c[][2], double *l)
   return ch;
 }
 
+static inline double
+polydd3 (double xh, double xl, int n, const double c[][2], double *l)
+{
+  int i = n - 1;
+  double ch, cl;
+  ch = fasttwosum (c[i][0], *l, &cl);
+  cl += c[i][1];
+  while(--i>=0){
+    ch = muldd_acc2 (xh, xl, ch, cl, &cl);
+    double th, tl;
+    th = fasttwosum (c[i][0], ch, &tl);
+    ch = th;
+    cl += tl + c[i][1];
+  }
+  *l = cl;
+  return ch;
+}
+
 static inline double
 polyddd (double x, int n, const double c[][2], double *l)
 {
index 4b1cbe46bcdd733609f6ad8daa2ce74cbb2e16dd..e017afc12a3225e28499e606435456da16960d87 100644 (file)
@@ -3,7 +3,7 @@
 Copyright (c) 2023-2026 Alexei Sibidanov.
 
 The original version of this file was copied from the CORE-MATH
-project (file src/binary64/atanh/atanh.c, revision dc9465e7).
+project (file src/binary64/atanh/atanh.c, revision c423b9a3).
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -40,11 +40,15 @@ as_atanh_zero (double x)
   double y2
       = x2
        * (CL[0] + x2 * (CL[1] + x2 * (CL[2] + x2 * (CL[3] + x2 * (CL[4])))));
-  double y1 = polydd (x2, x2l, 13, CH, &y2);
-  y1 = mulddd (y1, y2, x, &y2);
-  y1 = muldd_acc (y1, y2, x2, x2l, &y2);
+  double y1 = polydd3 (x2, x2l, 13, CH, &y2);
+  y1 = mulddd3 (y1, y2, x, &y2);
+  y1 = muldd_acc2 (x2, x2l, y1, y2, &y2);
   double y0 = fasttwosum (x, y1, &y1);
   y1 = fasttwosum (y1, y2, &y2);
+  /* We have 22 failures (only for RNDN, 11 up to sign) if we disable this
+     check, all with 53 or 54 identical bits after the round bit.
+     For example x=0x1.cc7092205cfafp-10 we have y0=0x1.cc70b12857108p-10
+     and y1=-0x1p-63.  */
   uint64_t t = asuint64 (y1);
   if (__glibc_unlikely (!(t & (~UINT64_C(0) >> 12))))
     {
index 6a091422702e3911ffaa06b0fc47a882521daaeb..38342ef1c1499c622a39103e823462297f219250 100644 (file)
@@ -26,23 +26,26 @@ SOFTWARE. */
 #include "s_atanh_data.h"
 
 const double __atanh_ch[][2]
-    = { { 0x1.5555555555555p-2, 0x1.5555555555555p-56 },
-       { 0x1.999999999999ap-3, -0x1.999999999611cp-57 },
-       { 0x1.2492492492492p-3, 0x1.2492490f76b25p-57 },
-       { 0x1.c71c71c71c71cp-4, 0x1.c71cd5c38a112p-58 },
-       { 0x1.745d1745d1746p-4, -0x1.7556c4165f4cap-59 },
-       { 0x1.3b13b13b13b14p-4, -0x1.b893c3b36052ep-59 },
-       { 0x1.1111111111105p-4, 0x1.4e1afd723ed1fp-59 },
-       { 0x1.e1e1e1e1e2678p-5, -0x1.f86ea96fb1435p-59 },
-       { 0x1.af286bc9f90ccp-5, 0x1.1e51a6e54fde9p-60 },
-       { 0x1.8618618c779b6p-5, -0x1.ab913de95c3bfp-61 },
-       { 0x1.642c84aa383ebp-5, 0x1.632e747641b12p-59 },
-       { 0x1.47ae2d205013cp-5, -0x1.0c9617e7bcff2p-60 },
-       { 0x1.2f664d60473f9p-5, 0x1.3adb3e2b7f35ep-61 } };
+    = { { 0x1.5555555555555p-2, 0x1.5555555555555p-56 },   /* degree 3 */
+       { 0x1.999999999999ap-3, -0x1.999999999611cp-57 },  /* degree 5 */
+       { 0x1.2492492492492p-3, 0x1.2492490f76b25p-57 },   /* degree 7 */
+       { 0x1.c71c71c71c71cp-4, 0x1.c71cd5c38a112p-58 },   /* degree 9 */
+       { 0x1.745d1745d1746p-4, -0x1.7556c4165f4cap-59 },  /* degree 11 */
+       { 0x1.3b13b13b13b14p-4, -0x1.b893c3b36052ep-59 },  /* degree 13 */
+       { 0x1.1111111111105p-4, 0x1.4e1afd723ed1fp-59 },   /* degree 15 */
+       { 0x1.e1e1e1e1e2678p-5, -0x1.f86ea96fb1435p-59 },  /* degree 17 */
+       { 0x1.af286bc9f90ccp-5, 0x1.1e51a6e54fde9p-60 },   /* degree 19 */
+       { 0x1.8618618c779b6p-5, -0x1.ab913de95c3bfp-61 },  /* degree 21 */
+       { 0x1.642c84aa383ebp-5, 0x1.632e747641b12p-59 },   /* degree 23 */
+       { 0x1.47ae2d205013cp-5, -0x1.0c9617e7bcff2p-60 },  /* degree 25 */
+       { 0x1.2f664d60473f9p-5, 0x1.3adb3e2b7f35ep-61 } }; /* degree 27 */
 
 const double __atanh_cl[]
-    = { 0x1.1a9a91fd692afp-5, 0x1.06dfbb35e7f44p-5, 0x1.037bed4d7588fp-5,
-       0x1.5aca6d6d720d6p-6, 0x1.99ea5700d53a5p-5 };
+    = { 0x1.1a9a91fd692afp-5, /* degree 29 */
+       0x1.06dfbb35e7f44p-5, /* degree 31 */
+       0x1.037bed4d7588fp-5, /* degree 33 */
+       0x1.5aca6d6d720d6p-6, /* degree 35 */
+       0x1.99ea5700d53a5p-5  /* degree 37 */ };
 
 const struct __atanh_B_t __atanh_B[] = {
   { 301, 27565 },    { 7189, 24786 },  { 13383, 22167 },  { 18923, 19696 },