aboutsummaryrefslogtreecommitdiff
path: root/math
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-02-27 17:48:37 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-02-27 17:48:37 +0000
commit2ca725c594e0c186d928dc0823be7d8b5976112c (patch)
tree8f477bda16d5f94bb925301798e653d3064ee75d /math
parentaf96be34825586536ebcfbf5c675e795ddd3c8fa (diff)
downloadglibc-2ca725c594e0c186d928dc0823be7d8b5976112c.tar.xz
glibc-2ca725c594e0c186d928dc0823be7d8b5976112c.zip
Fix ldbl-96, ldbl-128ibm atanhl inaccuracy (bug 18046, bug 18047).
The threshold in ldbl-96 atanhl for when to return the argument, 0x1p-28, is a bit too big, and that in ldbl-128ibm atanhl is much too big (the relevant condition being x^3/3 being < 0.5ulp of x), resulting in errors a bit above the limits of those considered acceptable in glibc in the ldbl-96 case, and in large errors in the ldbl-128ibm case. This patch changes those implementations to use more appropriate thresholds and adds tests around the thresholds for various formats. Tested for x86_64, x86 and powerpc. x86_64 and x86 ulps updated accordingly. [BZ #18046] [BZ #18047] * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c (__ieee754_atanhl): Use 0x1p-56L as threshold for just returning the argument. * sysdeps/ieee754/ldbl-96/e_atanhl.c (__ieee754_atanhl): Use 0x1p-32L as threshold for just returning the argument. * math/auto-libm-test-in: Add more tests of atanh. * math/auto-libm-test-out: Regenerated. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulp: Likewise.
Diffstat (limited to 'math')
-rw-r--r--math/auto-libm-test-in31
-rw-r--r--math/auto-libm-test-out875
2 files changed, 906 insertions, 0 deletions
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 19d5396d10..5e4b84d31d 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -300,7 +300,38 @@ atanh 0.25
atanh 0x1p-5
atanh 0x1p-10
atanh 0x1.2345p-20
+atanh 0x1p-8
+atanh 0x1p-9
+atanh 0x1p-10
+atanh 0x1p-11
+atanh 0x1p-12
+atanh 0x1p-13
+atanh 0x1p-24
+atanh 0x1p-25
+atanh 0x1p-26
+atanh 0x1p-27
+atanh 0x1p-28
+atanh 0x1p-29
+atanh 0x1p-30
+atanh 0x1p-31
+atanh 0x1p-32
+atanh 0x1p-33
+atanh 0x1p-48
+atanh 0x1p-49
+atanh 0x1p-50
+atanh 0x1p-51
+atanh 0x1p-52
+atanh 0x1p-53
+atanh 0x1p-54
+atanh 0x1p-55
+atanh 0x1p-56
+atanh 0x1p-57
+atanh 0x1p-58
+atanh 0x1p-59
+atanh 0x1p-100
# Bug 16352: underflow exception may be missing.
+atanh 0x1p-500 missing-underflow
+atanh 0x1p-5000 missing-underflow
atanh min missing-underflow
atanh -min missing-underflow
atanh min_subnorm missing-underflow
diff --git a/math/auto-libm-test-out b/math/auto-libm-test-out
index 27322e8541..66bdeb430c 100644
--- a/math/auto-libm-test-out
+++ b/math/auto-libm-test-out
@@ -17635,6 +17635,881 @@ atanh 0x1.2345p-20
= atanh tonearest ldbl-128ibm 0x1.2345p-20L : 0x1.23450000007daf665297209f1ap-20L : inexact-ok
= atanh towardzero ldbl-128ibm 0x1.2345p-20L : 0x1.23450000007daf665297209f198p-20L : inexact-ok
= atanh upward ldbl-128ibm 0x1.2345p-20L : 0x1.23450000007daf665297209f1ap-20L : inexact-ok
+atanh 0x1p-8
+= atanh downward flt-32 0x1p-8f : 0x1.000054p-8f : inexact-ok
+= atanh tonearest flt-32 0x1p-8f : 0x1.000056p-8f : inexact-ok
+= atanh towardzero flt-32 0x1p-8f : 0x1.000054p-8f : inexact-ok
+= atanh upward flt-32 0x1p-8f : 0x1.000056p-8f : inexact-ok
+= atanh downward dbl-64 0x1p-8 : 0x1.000055558888ap-8 : inexact-ok
+= atanh tonearest dbl-64 0x1p-8 : 0x1.000055558888bp-8 : inexact-ok
+= atanh towardzero dbl-64 0x1p-8 : 0x1.000055558888ap-8 : inexact-ok
+= atanh upward dbl-64 0x1p-8 : 0x1.000055558888bp-8 : inexact-ok
+= atanh downward ldbl-96-intel 0x1p-8L : 0x1.000055558888ad1ap-8L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x1p-8L : 0x1.000055558888ad1ap-8L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x1p-8L : 0x1.000055558888ad1ap-8L : inexact-ok
+= atanh upward ldbl-96-intel 0x1p-8L : 0x1.000055558888ad1cp-8L : inexact-ok
+= atanh downward ldbl-96-m68k 0x1p-8L : 0x1.000055558888ad1ap-8L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x1p-8L : 0x1.000055558888ad1ap-8L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x1p-8L : 0x1.000055558888ad1ap-8L : inexact-ok
+= atanh upward ldbl-96-m68k 0x1p-8L : 0x1.000055558888ad1cp-8L : inexact-ok
+= atanh downward ldbl-128 0x1p-8L : 0x1.000055558888ad1aee1ef9340407p-8L : inexact-ok
+= atanh tonearest ldbl-128 0x1p-8L : 0x1.000055558888ad1aee1ef9340408p-8L : inexact-ok
+= atanh towardzero ldbl-128 0x1p-8L : 0x1.000055558888ad1aee1ef9340407p-8L : inexact-ok
+= atanh upward ldbl-128 0x1p-8L : 0x1.000055558888ad1aee1ef9340408p-8L : inexact-ok
+= atanh downward ldbl-128ibm 0x1p-8L : 0x1.000055558888ad1aee1ef93404p-8L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x1p-8L : 0x1.000055558888ad1aee1ef93404p-8L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x1p-8L : 0x1.000055558888ad1aee1ef93404p-8L : inexact-ok
+= atanh upward ldbl-128ibm 0x1p-8L : 0x1.000055558888ad1aee1ef934048p-8L : inexact-ok
+atanh 0x1p-9
+= atanh downward flt-32 0x8p-12f : 0x8.0000ap-12f : inexact-ok
+= atanh tonearest flt-32 0x8p-12f : 0x8.0000bp-12f : inexact-ok
+= atanh towardzero flt-32 0x8p-12f : 0x8.0000ap-12f : inexact-ok
+= atanh upward flt-32 0x8p-12f : 0x8.0000bp-12f : inexact-ok
+= atanh downward dbl-64 0x8p-12 : 0x8.0000aaaac444p-12 : inexact-ok
+= atanh tonearest dbl-64 0x8p-12 : 0x8.0000aaaac4448p-12 : inexact-ok
+= atanh towardzero dbl-64 0x8p-12 : 0x8.0000aaaac444p-12 : inexact-ok
+= atanh upward dbl-64 0x8p-12 : 0x8.0000aaaac4448p-12 : inexact-ok
+= atanh downward ldbl-96-intel 0x8p-12L : 0x8.0000aaaac44448dp-12L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x8p-12L : 0x8.0000aaaac44448dp-12L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x8p-12L : 0x8.0000aaaac44448dp-12L : inexact-ok
+= atanh upward ldbl-96-intel 0x8p-12L : 0x8.0000aaaac44448ep-12L : inexact-ok
+= atanh downward ldbl-96-m68k 0x8p-12L : 0x8.0000aaaac44448dp-12L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x8p-12L : 0x8.0000aaaac44448dp-12L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x8p-12L : 0x8.0000aaaac44448dp-12L : inexact-ok
+= atanh upward ldbl-96-m68k 0x8p-12L : 0x8.0000aaaac44448ep-12L : inexact-ok
+= atanh downward ldbl-128 0x8p-12L : 0x8.0000aaaac44448d68e4c64f4d81p-12L : inexact-ok
+= atanh tonearest ldbl-128 0x8p-12L : 0x8.0000aaaac44448d68e4c64f4d81p-12L : inexact-ok
+= atanh towardzero ldbl-128 0x8p-12L : 0x8.0000aaaac44448d68e4c64f4d81p-12L : inexact-ok
+= atanh upward ldbl-128 0x8p-12L : 0x8.0000aaaac44448d68e4c64f4d818p-12L : inexact-ok
+= atanh downward ldbl-128ibm 0x8p-12L : 0x8.0000aaaac44448d68e4c64f4d8p-12L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x8p-12L : 0x8.0000aaaac44448d68e4c64f4d8p-12L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x8p-12L : 0x8.0000aaaac44448d68e4c64f4d8p-12L : inexact-ok
+= atanh upward ldbl-128ibm 0x8p-12L : 0x8.0000aaaac44448d68e4c64f4dcp-12L : inexact-ok
+atanh 0x1p-10
+= atanh downward flt-32 0x4p-12f : 0x4.00001p-12f : inexact-ok
+= atanh tonearest flt-32 0x4p-12f : 0x4.000018p-12f : inexact-ok
+= atanh towardzero flt-32 0x4p-12f : 0x4.00001p-12f : inexact-ok
+= atanh upward flt-32 0x4p-12f : 0x4.000018p-12f : inexact-ok
+= atanh downward dbl-64 0x4p-12 : 0x4.000015555622p-12 : inexact-ok
+= atanh tonearest dbl-64 0x4p-12 : 0x4.0000155556224p-12 : inexact-ok
+= atanh towardzero dbl-64 0x4p-12 : 0x4.000015555622p-12 : inexact-ok
+= atanh upward dbl-64 0x4p-12 : 0x4.0000155556224p-12 : inexact-ok
+= atanh downward ldbl-96-intel 0x4p-12L : 0x4.0000155556222228p-12L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x4p-12L : 0x4.0000155556222228p-12L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x4p-12L : 0x4.0000155556222228p-12L : inexact-ok
+= atanh upward ldbl-96-intel 0x4p-12L : 0x4.000015555622223p-12L : inexact-ok
+= atanh downward ldbl-96-m68k 0x4p-12L : 0x4.0000155556222228p-12L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x4p-12L : 0x4.0000155556222228p-12L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x4p-12L : 0x4.0000155556222228p-12L : inexact-ok
+= atanh upward ldbl-96-m68k 0x4p-12L : 0x4.000015555622223p-12L : inexact-ok
+= atanh downward ldbl-128 0x4p-12L : 0x4.000015555622222b46b4dd0dd6acp-12L : inexact-ok
+= atanh tonearest ldbl-128 0x4p-12L : 0x4.000015555622222b46b4dd0dd6bp-12L : inexact-ok
+= atanh towardzero ldbl-128 0x4p-12L : 0x4.000015555622222b46b4dd0dd6acp-12L : inexact-ok
+= atanh upward ldbl-128 0x4p-12L : 0x4.000015555622222b46b4dd0dd6bp-12L : inexact-ok
+= atanh downward ldbl-128ibm 0x4p-12L : 0x4.000015555622222b46b4dd0dd6p-12L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x4p-12L : 0x4.000015555622222b46b4dd0dd6p-12L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x4p-12L : 0x4.000015555622222b46b4dd0dd6p-12L : inexact-ok
+= atanh upward ldbl-128ibm 0x4p-12L : 0x4.000015555622222b46b4dd0dd8p-12L : inexact-ok
+atanh 0x1p-11
+= atanh downward flt-32 0x2p-12f : 0x2p-12f : inexact-ok
+= atanh tonearest flt-32 0x2p-12f : 0x2.000004p-12f : inexact-ok
+= atanh towardzero flt-32 0x2p-12f : 0x2p-12f : inexact-ok
+= atanh upward flt-32 0x2p-12f : 0x2.000004p-12f : inexact-ok
+= atanh downward dbl-64 0x2p-12 : 0x2.000002aaaab1p-12 : inexact-ok
+= atanh tonearest dbl-64 0x2p-12 : 0x2.000002aaaab12p-12 : inexact-ok
+= atanh towardzero dbl-64 0x2p-12 : 0x2.000002aaaab1p-12 : inexact-ok
+= atanh upward dbl-64 0x2p-12 : 0x2.000002aaaab12p-12 : inexact-ok
+= atanh downward ldbl-96-intel 0x2p-12L : 0x2.000002aaaab1111p-12L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x2p-12L : 0x2.000002aaaab1111p-12L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x2p-12L : 0x2.000002aaaab1111p-12L : inexact-ok
+= atanh upward ldbl-96-intel 0x2p-12L : 0x2.000002aaaab11114p-12L : inexact-ok
+= atanh downward ldbl-96-m68k 0x2p-12L : 0x2.000002aaaab1111p-12L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x2p-12L : 0x2.000002aaaab1111p-12L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x2p-12L : 0x2.000002aaaab1111p-12L : inexact-ok
+= atanh upward ldbl-96-m68k 0x2p-12L : 0x2.000002aaaab11114p-12L : inexact-ok
+= atanh downward ldbl-128 0x2p-12L : 0x2.000002aaaab11111235a35dc3dc4p-12L : inexact-ok
+= atanh tonearest ldbl-128 0x2p-12L : 0x2.000002aaaab11111235a35dc3dc4p-12L : inexact-ok
+= atanh towardzero ldbl-128 0x2p-12L : 0x2.000002aaaab11111235a35dc3dc4p-12L : inexact-ok
+= atanh upward ldbl-128 0x2p-12L : 0x2.000002aaaab11111235a35dc3dc6p-12L : inexact-ok
+= atanh downward ldbl-128ibm 0x2p-12L : 0x2.000002aaaab11111235a35dc3dp-12L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x2p-12L : 0x2.000002aaaab11111235a35dc3ep-12L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x2p-12L : 0x2.000002aaaab11111235a35dc3dp-12L : inexact-ok
+= atanh upward ldbl-128ibm 0x2p-12L : 0x2.000002aaaab11111235a35dc3ep-12L : inexact-ok
+atanh 0x1p-12
+= atanh downward flt-32 0x1p-12f : 0x1p-12f : inexact-ok
+= atanh tonearest flt-32 0x1p-12f : 0x1p-12f : inexact-ok
+= atanh towardzero flt-32 0x1p-12f : 0x1p-12f : inexact-ok
+= atanh upward flt-32 0x1p-12f : 0x1.000002p-12f : inexact-ok
+= atanh downward dbl-64 0x1p-12 : 0x1.0000005555558p-12 : inexact-ok
+= atanh tonearest dbl-64 0x1p-12 : 0x1.0000005555559p-12 : inexact-ok
+= atanh towardzero dbl-64 0x1p-12 : 0x1.0000005555558p-12 : inexact-ok
+= atanh upward dbl-64 0x1p-12 : 0x1.0000005555559p-12 : inexact-ok
+= atanh downward ldbl-96-intel 0x1p-12L : 0x1.0000005555558888p-12L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x1p-12L : 0x1.0000005555558888p-12L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x1p-12L : 0x1.0000005555558888p-12L : inexact-ok
+= atanh upward ldbl-96-intel 0x1p-12L : 0x1.000000555555888ap-12L : inexact-ok
+= atanh downward ldbl-96-m68k 0x1p-12L : 0x1.0000005555558888p-12L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x1p-12L : 0x1.0000005555558888p-12L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x1p-12L : 0x1.0000005555558888p-12L : inexact-ok
+= atanh upward ldbl-96-m68k 0x1p-12L : 0x1.000000555555888ap-12L : inexact-ok
+= atanh downward ldbl-128 0x1p-12L : 0x1.000000555555888888ad1ad1c98cp-12L : inexact-ok
+= atanh tonearest ldbl-128 0x1p-12L : 0x1.000000555555888888ad1ad1c98dp-12L : inexact-ok
+= atanh towardzero ldbl-128 0x1p-12L : 0x1.000000555555888888ad1ad1c98cp-12L : inexact-ok
+= atanh upward ldbl-128 0x1p-12L : 0x1.000000555555888888ad1ad1c98dp-12L : inexact-ok
+= atanh downward ldbl-128ibm 0x1p-12L : 0x1.000000555555888888ad1ad1c98p-12L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x1p-12L : 0x1.000000555555888888ad1ad1c98p-12L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x1p-12L : 0x1.000000555555888888ad1ad1c98p-12L : inexact-ok
+= atanh upward ldbl-128ibm 0x1p-12L : 0x1.000000555555888888ad1ad1cap-12L : inexact-ok
+atanh 0x1p-13
+= atanh downward flt-32 0x8p-16f : 0x8p-16f : inexact-ok
+= atanh tonearest flt-32 0x8p-16f : 0x8p-16f : inexact-ok
+= atanh towardzero flt-32 0x8p-16f : 0x8p-16f : inexact-ok
+= atanh upward flt-32 0x8p-16f : 0x8.00001p-16f : inexact-ok
+= atanh downward dbl-64 0x8p-16 : 0x8.000000aaaaaa8p-16 : inexact-ok
+= atanh tonearest dbl-64 0x8p-16 : 0x8.000000aaaaabp-16 : inexact-ok
+= atanh towardzero dbl-64 0x8p-16 : 0x8.000000aaaaaa8p-16 : inexact-ok
+= atanh upward dbl-64 0x8p-16 : 0x8.000000aaaaabp-16 : inexact-ok
+= atanh downward ldbl-96-intel 0x8p-16L : 0x8.000000aaaaaac44p-16L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x8p-16L : 0x8.000000aaaaaac44p-16L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x8p-16L : 0x8.000000aaaaaac44p-16L : inexact-ok
+= atanh upward ldbl-96-intel 0x8p-16L : 0x8.000000aaaaaac45p-16L : inexact-ok
+= atanh downward ldbl-96-m68k 0x8p-16L : 0x8.000000aaaaaac44p-16L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x8p-16L : 0x8.000000aaaaaac44p-16L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x8p-16L : 0x8.000000aaaaaac44p-16L : inexact-ok
+= atanh upward ldbl-96-m68k 0x8p-16L : 0x8.000000aaaaaac45p-16L : inexact-ok
+= atanh downward ldbl-128 0x8p-16L : 0x8.000000aaaaaac4444448d68d69b8p-16L : inexact-ok
+= atanh tonearest ldbl-128 0x8p-16L : 0x8.000000aaaaaac4444448d68d69b8p-16L : inexact-ok
+= atanh towardzero ldbl-128 0x8p-16L : 0x8.000000aaaaaac4444448d68d69b8p-16L : inexact-ok
+= atanh upward ldbl-128 0x8p-16L : 0x8.000000aaaaaac4444448d68d69cp-16L : inexact-ok
+= atanh downward ldbl-128ibm 0x8p-16L : 0x8.000000aaaaaac4444448d68d68p-16L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x8p-16L : 0x8.000000aaaaaac4444448d68d68p-16L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x8p-16L : 0x8.000000aaaaaac4444448d68d68p-16L : inexact-ok
+= atanh upward ldbl-128ibm 0x8p-16L : 0x8.000000aaaaaac4444448d68d6cp-16L : inexact-ok
+atanh 0x1p-24
+= atanh downward flt-32 0x1p-24f : 0x1p-24f : inexact-ok
+= atanh tonearest flt-32 0x1p-24f : 0x1p-24f : inexact-ok
+= atanh towardzero flt-32 0x1p-24f : 0x1p-24f : inexact-ok
+= atanh upward flt-32 0x1p-24f : 0x1.000002p-24f : inexact-ok
+= atanh downward dbl-64 0x1p-24 : 0x1.0000000000005p-24 : inexact-ok
+= atanh tonearest dbl-64 0x1p-24 : 0x1.0000000000005p-24 : inexact-ok
+= atanh towardzero dbl-64 0x1p-24 : 0x1.0000000000005p-24 : inexact-ok
+= atanh upward dbl-64 0x1p-24 : 0x1.0000000000006p-24 : inexact-ok
+= atanh downward ldbl-96-intel 0x1p-24L : 0x1.0000000000005554p-24L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x1p-24L : 0x1.0000000000005556p-24L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x1p-24L : 0x1.0000000000005554p-24L : inexact-ok
+= atanh upward ldbl-96-intel 0x1p-24L : 0x1.0000000000005556p-24L : inexact-ok
+= atanh downward ldbl-96-m68k 0x1p-24L : 0x1.0000000000005554p-24L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x1p-24L : 0x1.0000000000005556p-24L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x1p-24L : 0x1.0000000000005554p-24L : inexact-ok
+= atanh upward ldbl-96-m68k 0x1p-24L : 0x1.0000000000005556p-24L : inexact-ok
+= atanh downward ldbl-128 0x1p-24L : 0x1.0000000000005555555555558888p-24L : inexact-ok
+= atanh tonearest ldbl-128 0x1p-24L : 0x1.0000000000005555555555558889p-24L : inexact-ok
+= atanh towardzero ldbl-128 0x1p-24L : 0x1.0000000000005555555555558888p-24L : inexact-ok
+= atanh upward ldbl-128 0x1p-24L : 0x1.0000000000005555555555558889p-24L : inexact-ok
+= atanh downward ldbl-128ibm 0x1p-24L : 0x1.000000000000555555555555888p-24L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x1p-24L : 0x1.000000000000555555555555888p-24L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x1p-24L : 0x1.000000000000555555555555888p-24L : inexact-ok
+= atanh upward ldbl-128ibm 0x1p-24L : 0x1.00000000000055555555555589p-24L : inexact-ok
+atanh 0x1p-25
+= atanh downward flt-32 0x8p-28f : 0x8p-28f : inexact-ok
+= atanh tonearest flt-32 0x8p-28f : 0x8p-28f : inexact-ok
+= atanh towardzero flt-32 0x8p-28f : 0x8p-28f : inexact-ok
+= atanh upward flt-32 0x8p-28f : 0x8.00001p-28f : inexact-ok
+= atanh downward dbl-64 0x8p-28 : 0x8.0000000000008p-28 : inexact-ok
+= atanh tonearest dbl-64 0x8p-28 : 0x8.0000000000008p-28 : inexact-ok
+= atanh towardzero dbl-64 0x8p-28 : 0x8.0000000000008p-28 : inexact-ok
+= atanh upward dbl-64 0x8p-28 : 0x8.000000000001p-28 : inexact-ok
+= atanh downward ldbl-96-intel 0x8p-28L : 0x8.000000000000aaap-28L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x8p-28L : 0x8.000000000000aabp-28L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x8p-28L : 0x8.000000000000aaap-28L : inexact-ok
+= atanh upward ldbl-96-intel 0x8p-28L : 0x8.000000000000aabp-28L : inexact-ok
+= atanh downward ldbl-96-m68k 0x8p-28L : 0x8.000000000000aaap-28L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x8p-28L : 0x8.000000000000aabp-28L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x8p-28L : 0x8.000000000000aaap-28L : inexact-ok
+= atanh upward ldbl-96-m68k 0x8p-28L : 0x8.000000000000aabp-28L : inexact-ok
+= atanh downward ldbl-128 0x8p-28L : 0x8.000000000000aaaaaaaaaaaac44p-28L : inexact-ok
+= atanh tonearest ldbl-128 0x8p-28L : 0x8.000000000000aaaaaaaaaaaac448p-28L : inexact-ok
+= atanh towardzero ldbl-128 0x8p-28L : 0x8.000000000000aaaaaaaaaaaac44p-28L : inexact-ok
+= atanh upward ldbl-128 0x8p-28L : 0x8.000000000000aaaaaaaaaaaac448p-28L : inexact-ok
+= atanh downward ldbl-128ibm 0x8p-28L : 0x8.000000000000aaaaaaaaaaaac4p-28L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x8p-28L : 0x8.000000000000aaaaaaaaaaaac4p-28L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x8p-28L : 0x8.000000000000aaaaaaaaaaaac4p-28L : inexact-ok
+= atanh upward ldbl-128ibm 0x8p-28L : 0x8.000000000000aaaaaaaaaaaac8p-28L : inexact-ok
+atanh 0x1p-26
+= atanh downward flt-32 0x4p-28f : 0x4p-28f : inexact-ok
+= atanh tonearest flt-32 0x4p-28f : 0x4p-28f : inexact-ok
+= atanh towardzero flt-32 0x4p-28f : 0x4p-28f : inexact-ok
+= atanh upward flt-32 0x4p-28f : 0x4.000008p-28f : inexact-ok
+= atanh downward dbl-64 0x4p-28 : 0x4p-28 : inexact-ok
+= atanh tonearest dbl-64 0x4p-28 : 0x4p-28 : inexact-ok
+= atanh towardzero dbl-64 0x4p-28 : 0x4p-28 : inexact-ok
+= atanh upward dbl-64 0x4p-28 : 0x4.0000000000004p-28 : inexact-ok
+= atanh downward ldbl-96-intel 0x4p-28L : 0x4.000000000000155p-28L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x4p-28L : 0x4.0000000000001558p-28L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x4p-28L : 0x4.000000000000155p-28L : inexact-ok
+= atanh upward ldbl-96-intel 0x4p-28L : 0x4.0000000000001558p-28L : inexact-ok
+= atanh downward ldbl-96-m68k 0x4p-28L : 0x4.000000000000155p-28L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x4p-28L : 0x4.0000000000001558p-28L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x4p-28L : 0x4.000000000000155p-28L : inexact-ok
+= atanh upward ldbl-96-m68k 0x4p-28L : 0x4.0000000000001558p-28L : inexact-ok
+= atanh downward ldbl-128 0x4p-28L : 0x4.000000000000155555555555562p-28L : inexact-ok
+= atanh tonearest ldbl-128 0x4p-28L : 0x4.0000000000001555555555555624p-28L : inexact-ok
+= atanh towardzero ldbl-128 0x4p-28L : 0x4.000000000000155555555555562p-28L : inexact-ok
+= atanh upward ldbl-128 0x4p-28L : 0x4.0000000000001555555555555624p-28L : inexact-ok
+= atanh downward ldbl-128ibm 0x4p-28L : 0x4.00000000000015555555555556p-28L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x4p-28L : 0x4.00000000000015555555555556p-28L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x4p-28L : 0x4.00000000000015555555555556p-28L : inexact-ok
+= atanh upward ldbl-128ibm 0x4p-28L : 0x4.00000000000015555555555558p-28L : inexact-ok
+atanh 0x1p-27
+= atanh downward flt-32 0x2p-28f : 0x2p-28f : inexact-ok
+= atanh tonearest flt-32 0x2p-28f : 0x2p-28f : inexact-ok
+= atanh towardzero flt-32 0x2p-28f : 0x2p-28f : inexact-ok
+= atanh upward flt-32 0x2p-28f : 0x2.000004p-28f : inexact-ok
+= atanh downward dbl-64 0x2p-28 : 0x2p-28 : inexact-ok
+= atanh tonearest dbl-64 0x2p-28 : 0x2p-28 : inexact-ok
+= atanh towardzero dbl-64 0x2p-28 : 0x2p-28 : inexact-ok
+= atanh upward dbl-64 0x2p-28 : 0x2.0000000000002p-28 : inexact-ok
+= atanh downward ldbl-96-intel 0x2p-28L : 0x2.00000000000002a8p-28L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x2p-28L : 0x2.00000000000002acp-28L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x2p-28L : 0x2.00000000000002a8p-28L : inexact-ok
+= atanh upward ldbl-96-intel 0x2p-28L : 0x2.00000000000002acp-28L : inexact-ok
+= atanh downward ldbl-96-m68k 0x2p-28L : 0x2.00000000000002a8p-28L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x2p-28L : 0x2.00000000000002acp-28L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x2p-28L : 0x2.00000000000002a8p-28L : inexact-ok
+= atanh upward ldbl-96-m68k 0x2p-28L : 0x2.00000000000002acp-28L : inexact-ok
+= atanh downward ldbl-128 0x2p-28L : 0x2.00000000000002aaaaaaaaaaaabp-28L : inexact-ok
+= atanh tonearest ldbl-128 0x2p-28L : 0x2.00000000000002aaaaaaaaaaaab2p-28L : inexact-ok
+= atanh towardzero ldbl-128 0x2p-28L : 0x2.00000000000002aaaaaaaaaaaabp-28L : inexact-ok
+= atanh upward ldbl-128 0x2p-28L : 0x2.00000000000002aaaaaaaaaaaab2p-28L : inexact-ok
+= atanh downward ldbl-128ibm 0x2p-28L : 0x2.00000000000002aaaaaaaaaaaap-28L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x2p-28L : 0x2.00000000000002aaaaaaaaaaabp-28L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x2p-28L : 0x2.00000000000002aaaaaaaaaaaap-28L : inexact-ok
+= atanh upward ldbl-128ibm 0x2p-28L : 0x2.00000000000002aaaaaaaaaaabp-28L : inexact-ok
+atanh 0x1p-28
+= atanh downward flt-32 0x1p-28f : 0x1p-28f : inexact-ok
+= atanh tonearest flt-32 0x1p-28f : 0x1p-28f : inexact-ok
+= atanh towardzero flt-32 0x1p-28f : 0x1p-28f : inexact-ok
+= atanh upward flt-32 0x1p-28f : 0x1.000002p-28f : inexact-ok
+= atanh downward dbl-64 0x1p-28 : 0x1p-28 : inexact-ok
+= atanh tonearest dbl-64 0x1p-28 : 0x1p-28 : inexact-ok
+= atanh towardzero dbl-64 0x1p-28 : 0x1p-28 : inexact-ok
+= atanh upward dbl-64 0x1p-28 : 0x1.0000000000001p-28 : inexact-ok
+= atanh downward ldbl-96-intel 0x1p-28L : 0x1.0000000000000054p-28L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x1p-28L : 0x1.0000000000000056p-28L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x1p-28L : 0x1.0000000000000054p-28L : inexact-ok
+= atanh upward ldbl-96-intel 0x1p-28L : 0x1.0000000000000056p-28L : inexact-ok
+= atanh downward ldbl-96-m68k 0x1p-28L : 0x1.0000000000000054p-28L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x1p-28L : 0x1.0000000000000056p-28L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x1p-28L : 0x1.0000000000000054p-28L : inexact-ok
+= atanh upward ldbl-96-m68k 0x1p-28L : 0x1.0000000000000056p-28L : inexact-ok
+= atanh downward ldbl-128 0x1p-28L : 0x1.0000000000000055555555555555p-28L : inexact-ok
+= atanh tonearest ldbl-128 0x1p-28L : 0x1.0000000000000055555555555556p-28L : inexact-ok
+= atanh towardzero ldbl-128 0x1p-28L : 0x1.0000000000000055555555555555p-28L : inexact-ok
+= atanh upward ldbl-128 0x1p-28L : 0x1.0000000000000055555555555556p-28L : inexact-ok
+= atanh downward ldbl-128ibm 0x1p-28L : 0x1.00000000000000555555555555p-28L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x1p-28L : 0x1.000000000000005555555555558p-28L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x1p-28L : 0x1.00000000000000555555555555p-28L : inexact-ok
+= atanh upward ldbl-128ibm 0x1p-28L : 0x1.000000000000005555555555558p-28L : inexact-ok
+atanh 0x1p-29
+= atanh downward flt-32 0x8p-32f : 0x8p-32f : inexact-ok
+= atanh tonearest flt-32 0x8p-32f : 0x8p-32f : inexact-ok
+= atanh towardzero flt-32 0x8p-32f : 0x8p-32f : inexact-ok
+= atanh upward flt-32 0x8p-32f : 0x8.00001p-32f : inexact-ok
+= atanh downward dbl-64 0x8p-32 : 0x8p-32 : inexact-ok
+= atanh tonearest dbl-64 0x8p-32 : 0x8p-32 : inexact-ok
+= atanh towardzero dbl-64 0x8p-32 : 0x8p-32 : inexact-ok
+= atanh upward dbl-64 0x8p-32 : 0x8.0000000000008p-32 : inexact-ok
+= atanh downward ldbl-96-intel 0x8p-32L : 0x8.00000000000000ap-32L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x8p-32L : 0x8.00000000000000bp-32L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x8p-32L : 0x8.00000000000000ap-32L : inexact-ok
+= atanh upward ldbl-96-intel 0x8p-32L : 0x8.00000000000000bp-32L : inexact-ok
+= atanh downward ldbl-96-m68k 0x8p-32L : 0x8.00000000000000ap-32L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x8p-32L : 0x8.00000000000000bp-32L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x8p-32L : 0x8.00000000000000ap-32L : inexact-ok
+= atanh upward ldbl-96-m68k 0x8p-32L : 0x8.00000000000000bp-32L : inexact-ok
+= atanh downward ldbl-128 0x8p-32L : 0x8.00000000000000aaaaaaaaaaaaa8p-32L : inexact-ok
+= atanh tonearest ldbl-128 0x8p-32L : 0x8.00000000000000aaaaaaaaaaaaa8p-32L : inexact-ok
+= atanh towardzero ldbl-128 0x8p-32L : 0x8.00000000000000aaaaaaaaaaaaa8p-32L : inexact-ok
+= atanh upward ldbl-128 0x8p-32L : 0x8.00000000000000aaaaaaaaaaaabp-32L : inexact-ok
+= atanh downward ldbl-128ibm 0x8p-32L : 0x8.00000000000000aaaaaaaaaaa8p-32L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x8p-32L : 0x8.00000000000000aaaaaaaaaaacp-32L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x8p-32L : 0x8.00000000000000aaaaaaaaaaa8p-32L : inexact-ok
+= atanh upward ldbl-128ibm 0x8p-32L : 0x8.00000000000000aaaaaaaaaaacp-32L : inexact-ok
+atanh 0x1p-30
+= atanh downward flt-32 0x4p-32f : 0x4p-32f : inexact-ok
+= atanh tonearest flt-32 0x4p-32f : 0x4p-32f : inexact-ok
+= atanh towardzero flt-32 0x4p-32f : 0x4p-32f : inexact-ok
+= atanh upward flt-32 0x4p-32f : 0x4.000008p-32f : inexact-ok
+= atanh downward dbl-64 0x4p-32 : 0x4p-32 : inexact-ok
+= atanh tonearest dbl-64 0x4p-32 : 0x4p-32 : inexact-ok
+= atanh towardzero dbl-64 0x4p-32 : 0x4p-32 : inexact-ok
+= atanh upward dbl-64 0x4p-32 : 0x4.0000000000004p-32 : inexact-ok
+= atanh downward ldbl-96-intel 0x4p-32L : 0x4.000000000000001p-32L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x4p-32L : 0x4.0000000000000018p-32L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x4p-32L : 0x4.000000000000001p-32L : inexact-ok
+= atanh upward ldbl-96-intel 0x4p-32L : 0x4.0000000000000018p-32L : inexact-ok
+= atanh downward ldbl-96-m68k 0x4p-32L : 0x4.000000000000001p-32L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x4p-32L : 0x4.0000000000000018p-32L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x4p-32L : 0x4.000000000000001p-32L : inexact-ok
+= atanh upward ldbl-96-m68k 0x4p-32L : 0x4.0000000000000018p-32L : inexact-ok
+= atanh downward ldbl-128 0x4p-32L : 0x4.0000000000000015555555555554p-32L : inexact-ok
+= atanh tonearest ldbl-128 0x4p-32L : 0x4.0000000000000015555555555554p-32L : inexact-ok
+= atanh towardzero ldbl-128 0x4p-32L : 0x4.0000000000000015555555555554p-32L : inexact-ok
+= atanh upward ldbl-128 0x4p-32L : 0x4.0000000000000015555555555558p-32L : inexact-ok
+= atanh downward ldbl-128ibm 0x4p-32L : 0x4.00000000000000155555555554p-32L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x4p-32L : 0x4.00000000000000155555555556p-32L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x4p-32L : 0x4.00000000000000155555555554p-32L : inexact-ok
+= atanh upward ldbl-128ibm 0x4p-32L : 0x4.00000000000000155555555556p-32L : inexact-ok
+atanh 0x1p-31
+= atanh downward flt-32 0x2p-32f : 0x2p-32f : inexact-ok
+= atanh tonearest flt-32 0x2p-32f : 0x2p-32f : inexact-ok
+= atanh towardzero flt-32 0x2p-32f : 0x2p-32f : inexact-ok
+= atanh upward flt-32 0x2p-32f : 0x2.000004p-32f : inexact-ok
+= atanh downward dbl-64 0x2p-32 : 0x2p-32 : inexact-ok
+= atanh tonearest dbl-64 0x2p-32 : 0x2p-32 : inexact-ok
+= atanh towardzero dbl-64 0x2p-32 : 0x2p-32 : inexact-ok
+= atanh upward dbl-64 0x2p-32 : 0x2.0000000000002p-32 : inexact-ok
+= atanh downward ldbl-96-intel 0x2p-32L : 0x2p-32L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x2p-32L : 0x2.0000000000000004p-32L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x2p-32L : 0x2p-32L : inexact-ok
+= atanh upward ldbl-96-intel 0x2p-32L : 0x2.0000000000000004p-32L : inexact-ok
+= atanh downward ldbl-96-m68k 0x2p-32L : 0x2p-32L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x2p-32L : 0x2.0000000000000004p-32L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x2p-32L : 0x2p-32L : inexact-ok
+= atanh upward ldbl-96-m68k 0x2p-32L : 0x2.0000000000000004p-32L : inexact-ok
+= atanh downward ldbl-128 0x2p-32L : 0x2.0000000000000002aaaaaaaaaaaap-32L : inexact-ok
+= atanh tonearest ldbl-128 0x2p-32L : 0x2.0000000000000002aaaaaaaaaaaap-32L : inexact-ok
+= atanh towardzero ldbl-128 0x2p-32L : 0x2.0000000000000002aaaaaaaaaaaap-32L : inexact-ok
+= atanh upward ldbl-128 0x2p-32L : 0x2.0000000000000002aaaaaaaaaaacp-32L : inexact-ok
+= atanh downward ldbl-128ibm 0x2p-32L : 0x2.0000000000000002aaaaaaaaaap-32L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x2p-32L : 0x2.0000000000000002aaaaaaaaabp-32L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x2p-32L : 0x2.0000000000000002aaaaaaaaaap-32L : inexact-ok
+= atanh upward ldbl-128ibm 0x2p-32L : 0x2.0000000000000002aaaaaaaaabp-32L : inexact-ok
+atanh 0x1p-32
+= atanh downward flt-32 0x1p-32f : 0x1p-32f : inexact-ok
+= atanh tonearest flt-32 0x1p-32f : 0x1p-32f : inexact-ok
+= atanh towardzero flt-32 0x1p-32f : 0x1p-32f : inexact-ok
+= atanh upward flt-32 0x1p-32f : 0x1.000002p-32f : inexact-ok
+= atanh downward dbl-64 0x1p-32 : 0x1p-32 : inexact-ok
+= atanh tonearest dbl-64 0x1p-32 : 0x1p-32 : inexact-ok
+= atanh towardzero dbl-64 0x1p-32 : 0x1p-32 : inexact-ok
+= atanh upward dbl-64 0x1p-32 : 0x1.0000000000001p-32 : inexact-ok
+= atanh downward ldbl-96-intel 0x1p-32L : 0x1p-32L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x1p-32L : 0x1p-32L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x1p-32L : 0x1p-32L : inexact-ok