[COMMITTED] math: Update tanh from CORE-MATH (revision bb39e4fa)

Adhemerval Zanella <[email protected]>
Newsgroups gmane.comp.lib.glibc.alpha
Message-ID <[email protected]>
The bug only exists in the non-FMA-contracted compilation of that
branch. On x86_64 it can be triggered with:

  GLIBC_TUNABLES=glibc.cpu.hwcaps=-AVX2 math/test-double-tanh

Or by building without ifunc support.

Checked on aarch64-linux-gnu and x86_64-linux-gnu with
--disable-multi-arch.
---
 SHARED-FILES                    |   2 +-
 math/auto-libm-test-in          |   6 +
 math/auto-libm-test-out-tanh    | 414 ++++++++++++++++++++++++++++++++
 sysdeps/ieee754/dbl-64/s_tanh.c |   6 +-
 4 files changed, 425 insertions(+), 3 deletions(-)

diff --git a/SHARED-FILES b/SHARED-FILES
index cf2a19c015..b630b41209 100644
--- a/SHARED-FILES
+++ b/SHARED-FILES
@@ -280,7 +280,7 @@ core-math:
   sysdeps/ieee754/dbl-64/s_erf.c
   # src/binary64/erfc/erfc.c, revision 55e9869e
   sysdeps/ieee754/dbl-64/s_erfc.c
-  # src/binary64/tanh/tanh.c, revision cf237fa0
+  # src/binary64/tanh/tanh.c, revision bb39e4fa
   sysdeps/ieee754/dbl-64/s_tanh.c
   # src/binary32/acos/acosf.c, revision 56dd347
   sysdeps/ieee754/flt-32/e_acosf.c
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 5c4d486af4..939da2c833 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -10119,6 +10119,12 @@ tanh 0x0.fffffffffffffp-1022
 tanh 0x3.b9979a543d0fbfa8p-4
 tanh 0x1.a0112a16e9318p+1
 tanh -0x1.a0112a16e9318p+1
+tanh 0x1.a0bd10af4ac2bp+1
+tanh -0x1.a0bd10af4ac2bp+1
+tanh 0x1.a0bd1178ea346p+1
+tanh -0x1.a0bd1178ea346p+1
+tanh 0x1.a0bd144ac78ap+1
+tanh -0x1.a0bd144ac78ap+1
 tanh max
 tanh -max
 tanh min
diff --git a/math/auto-libm-test-out-tanh b/math/auto-libm-test-out-tanh
index 2f2a9166c0..73a8096307 100644
--- a/math/auto-libm-test-out-tanh
+++ b/math/auto-libm-test-out-tanh
@@ -2601,6 +2601,420 @@ tanh -0x1.a0112a16e9318p+1
 = tanh tonearest ibm128 -0x3.4022542dd263p+0 : -0xf.f3b7158906b2800000506e94fp-4 : inexact-ok
 = tanh towardzero ibm128 -0x3.4022542dd263p+0 : -0xf.f3b7158906b2800000506e94ecp-4 : inexact-ok
 = tanh upward ibm128 -0x3.4022542dd263p+0 : -0xf.f3b7158906b2800000506e94ecp-4 : inexact-ok
+tanh 0x1.a0bd10af4ac2bp+1
+= tanh downward binary32 0x3.417a24p+0 : 0xf.f3d7dp-4 : inexact-ok
+= tanh tonearest binary32 0x3.417a24p+0 : 0xf.f3d7ep-4 : inexact-ok
+= tanh towardzero binary32 0x3.417a24p+0 : 0xf.f3d7dp-4 : inexact-ok
+= tanh upward binary32 0x3.417a24p+0 : 0xf.f3d7ep-4 : inexact-ok
+= tanh downward binary64 0x3.417a24p+0 : 0xf.f3d7dc3db7d6p-4 : inexact-ok
+= tanh tonearest binary64 0x3.417a24p+0 : 0xf.f3d7dc3db7d68p-4 : inexact-ok
+= tanh towardzero binary64 0x3.417a24p+0 : 0xf.f3d7dc3db7d6p-4 : inexact-ok
+= tanh upward binary64 0x3.417a24p+0 : 0xf.f3d7dc3db7d68p-4 : inexact-ok
+= tanh downward intel96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh tonearest intel96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh towardzero intel96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh upward intel96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh downward m68k96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh tonearest m68k96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh towardzero m68k96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh upward m68k96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh downward binary128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d88p-4 : inexact-ok
+= tanh tonearest binary128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d88p-4 : inexact-ok
+= tanh towardzero binary128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d88p-4 : inexact-ok
+= tanh upward binary128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d888p-4 : inexact-ok
+= tanh downward ibm128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d8p-4 : inexact-ok
+= tanh tonearest ibm128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d8p-4 : inexact-ok
+= tanh towardzero ibm128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d8p-4 : inexact-ok
+= tanh upward ibm128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5dcp-4 : inexact-ok
+= tanh downward binary32 0x3.417a2p+0 : 0xf.f3d7dp-4 : inexact-ok
+= tanh tonearest binary32 0x3.417a2p+0 : 0xf.f3d7ep-4 : inexact-ok
+= tanh towardzero binary32 0x3.417a2p+0 : 0xf.f3d7dp-4 : inexact-ok
+= tanh upward binary32 0x3.417a2p+0 : 0xf.f3d7ep-4 : inexact-ok
+= tanh downward binary64 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9p-4 : inexact-ok
+= tanh tonearest binary64 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9p-4 : inexact-ok
+= tanh towardzero binary64 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9p-4 : inexact-ok
+= tanh upward binary64 0x3.417a2p+0 : 0xf.f3d7dbdc9ba98p-4 : inexact-ok
+= tanh downward intel96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh tonearest intel96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh towardzero intel96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh upward intel96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh downward m68k96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh tonearest m68k96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh towardzero m68k96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh upward m68k96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh downward binary128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2af278p-4 : inexact-ok
+= tanh tonearest binary128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2af28p-4 : inexact-ok
+= tanh towardzero binary128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2af278p-4 : inexact-ok
+= tanh upward binary128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2af28p-4 : inexact-ok
+= tanh downward ibm128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2afp-4 : inexact-ok
+= tanh tonearest ibm128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2af4p-4 : inexact-ok
+= tanh towardzero ibm128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2afp-4 : inexact-ok
+= tanh upward ibm128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2af4p-4 : inexact-ok
+= tanh downward binary64 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh tonearest binary64 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh towardzero binary64 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh upward binary64 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf98p-4 : inexact-ok
+= tanh downward intel96 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh tonearest intel96 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh towardzero intel96 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh upward intel96 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9001p-4 : inexact-ok
+= tanh downward m68k96 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh tonearest m68k96 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh towardzero m68k96 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh upward m68k96 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9001p-4 : inexact-ok
+= tanh downward binary128 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9000000a132029408p-4 : inexact-ok
+= tanh tonearest binary128 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9000000a132029408p-4 : inexact-ok
+= tanh towardzero binary128 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9000000a132029408p-4 : inexact-ok
+= tanh upward binary128 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9000000a13202941p-4 : inexact-ok
+= tanh downward ibm128 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9000000a1320294p-4 : inexact-ok
+= tanh tonearest ibm128 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9000000a1320294p-4 : inexact-ok
+= tanh towardzero ibm128 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9000000a1320294p-4 : inexact-ok
+= tanh upward ibm128 0x3.417a215e95856p+0 : 0xf.f3d7dbfddaf9000000a1320298p-4 : inexact-ok
+tanh -0x1.a0bd10af4ac2bp+1
+= tanh downward binary32 -0x3.417a2p+0 : -0xf.f3d7ep-4 : inexact-ok
+= tanh tonearest binary32 -0x3.417a2p+0 : -0xf.f3d7ep-4 : inexact-ok
+= tanh towardzero binary32 -0x3.417a2p+0 : -0xf.f3d7dp-4 : inexact-ok
+= tanh upward binary32 -0x3.417a2p+0 : -0xf.f3d7dp-4 : inexact-ok
+= tanh downward binary64 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba98p-4 : inexact-ok
+= tanh tonearest binary64 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9p-4 : inexact-ok
+= tanh towardzero binary64 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9p-4 : inexact-ok
+= tanh upward binary64 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9p-4 : inexact-ok
+= tanh downward intel96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh tonearest intel96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh towardzero intel96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh upward intel96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh downward m68k96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh tonearest m68k96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh towardzero m68k96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh upward m68k96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh downward binary128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2af28p-4 : inexact-ok
+= tanh tonearest binary128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2af28p-4 : inexact-ok
+= tanh towardzero binary128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2af278p-4 : inexact-ok
+= tanh upward binary128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2af278p-4 : inexact-ok
+= tanh downward ibm128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2af4p-4 : inexact-ok
+= tanh tonearest ibm128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2af4p-4 : inexact-ok
+= tanh towardzero ibm128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2afp-4 : inexact-ok
+= tanh upward ibm128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2afp-4 : inexact-ok
+= tanh downward binary32 -0x3.417a24p+0 : -0xf.f3d7ep-4 : inexact-ok
+= tanh tonearest binary32 -0x3.417a24p+0 : -0xf.f3d7ep-4 : inexact-ok
+= tanh towardzero binary32 -0x3.417a24p+0 : -0xf.f3d7dp-4 : inexact-ok
+= tanh upward binary32 -0x3.417a24p+0 : -0xf.f3d7dp-4 : inexact-ok
+= tanh downward binary64 -0x3.417a24p+0 : -0xf.f3d7dc3db7d68p-4 : inexact-ok
+= tanh tonearest binary64 -0x3.417a24p+0 : -0xf.f3d7dc3db7d68p-4 : inexact-ok
+= tanh towardzero binary64 -0x3.417a24p+0 : -0xf.f3d7dc3db7d6p-4 : inexact-ok
+= tanh upward binary64 -0x3.417a24p+0 : -0xf.f3d7dc3db7d6p-4 : inexact-ok
+= tanh downward intel96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh tonearest intel96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh towardzero intel96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh upward intel96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh downward m68k96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh tonearest m68k96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh towardzero m68k96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh upward m68k96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh downward binary128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d888p-4 : inexact-ok
+= tanh tonearest binary128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d88p-4 : inexact-ok
+= tanh towardzero binary128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d88p-4 : inexact-ok
+= tanh upward binary128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d88p-4 : inexact-ok
+= tanh downward ibm128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5dcp-4 : inexact-ok
+= tanh tonearest ibm128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d8p-4 : inexact-ok
+= tanh towardzero ibm128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d8p-4 : inexact-ok
+= tanh upward ibm128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d8p-4 : inexact-ok
+= tanh downward binary64 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf98p-4 : inexact-ok
+= tanh tonearest binary64 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh towardzero binary64 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh upward binary64 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh downward intel96 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9001p-4 : inexact-ok
+= tanh tonearest intel96 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh towardzero intel96 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh upward intel96 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh downward m68k96 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9001p-4 : inexact-ok
+= tanh tonearest m68k96 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh towardzero m68k96 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh upward m68k96 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9p-4 : inexact-ok
+= tanh downward binary128 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9000000a13202941p-4 : inexact-ok
+= tanh tonearest binary128 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9000000a132029408p-4 : inexact-ok
+= tanh towardzero binary128 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9000000a132029408p-4 : inexact-ok
+= tanh upward binary128 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9000000a132029408p-4 : inexact-ok
+= tanh downward ibm128 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9000000a1320298p-4 : inexact-ok
+= tanh tonearest ibm128 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9000000a1320294p-4 : inexact-ok
+= tanh towardzero ibm128 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9000000a1320294p-4 : inexact-ok
+= tanh upward ibm128 -0x3.417a215e95856p+0 : -0xf.f3d7dbfddaf9000000a1320294p-4 : inexact-ok
+tanh 0x1.a0bd1178ea346p+1
+= tanh downward binary32 0x3.417a24p+0 : 0xf.f3d7dp-4 : inexact-ok
+= tanh tonearest binary32 0x3.417a24p+0 : 0xf.f3d7ep-4 : inexact-ok
+= tanh towardzero binary32 0x3.417a24p+0 : 0xf.f3d7dp-4 : inexact-ok
+= tanh upward binary32 0x3.417a24p+0 : 0xf.f3d7ep-4 : inexact-ok
+= tanh downward binary64 0x3.417a24p+0 : 0xf.f3d7dc3db7d6p-4 : inexact-ok
+= tanh tonearest binary64 0x3.417a24p+0 : 0xf.f3d7dc3db7d68p-4 : inexact-ok
+= tanh towardzero binary64 0x3.417a24p+0 : 0xf.f3d7dc3db7d6p-4 : inexact-ok
+= tanh upward binary64 0x3.417a24p+0 : 0xf.f3d7dc3db7d68p-4 : inexact-ok
+= tanh downward intel96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh tonearest intel96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh towardzero intel96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh upward intel96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh downward m68k96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh tonearest m68k96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh towardzero m68k96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh upward m68k96 0x3.417a24p+0 : 0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh downward binary128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d88p-4 : inexact-ok
+= tanh tonearest binary128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d88p-4 : inexact-ok
+= tanh towardzero binary128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d88p-4 : inexact-ok
+= tanh upward binary128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d888p-4 : inexact-ok
+= tanh downward ibm128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d8p-4 : inexact-ok
+= tanh tonearest ibm128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d8p-4 : inexact-ok
+= tanh towardzero ibm128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5d8p-4 : inexact-ok
+= tanh upward ibm128 0x3.417a24p+0 : 0xf.f3d7dc3db7d664cd14c092d5dcp-4 : inexact-ok
+= tanh downward binary32 0x3.417a2p+0 : 0xf.f3d7dp-4 : inexact-ok
+= tanh tonearest binary32 0x3.417a2p+0 : 0xf.f3d7ep-4 : inexact-ok
+= tanh towardzero binary32 0x3.417a2p+0 : 0xf.f3d7dp-4 : inexact-ok
+= tanh upward binary32 0x3.417a2p+0 : 0xf.f3d7ep-4 : inexact-ok
+= tanh downward binary64 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9p-4 : inexact-ok
+= tanh tonearest binary64 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9p-4 : inexact-ok
+= tanh towardzero binary64 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9p-4 : inexact-ok
+= tanh upward binary64 0x3.417a2p+0 : 0xf.f3d7dbdc9ba98p-4 : inexact-ok
+= tanh downward intel96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh tonearest intel96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh towardzero intel96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh upward intel96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh downward m68k96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh tonearest m68k96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh towardzero m68k96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh upward m68k96 0x3.417a2p+0 : 0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh downward binary128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2af278p-4 : inexact-ok
+= tanh tonearest binary128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2af28p-4 : inexact-ok
+= tanh towardzero binary128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2af278p-4 : inexact-ok
+= tanh upward binary128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2af28p-4 : inexact-ok
+= tanh downward ibm128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2afp-4 : inexact-ok
+= tanh tonearest ibm128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2af4p-4 : inexact-ok
+= tanh towardzero ibm128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2afp-4 : inexact-ok
+= tanh upward ibm128 0x3.417a2p+0 : 0xf.f3d7dbdc9ba9389c568b3e2af4p-4 : inexact-ok
+= tanh downward binary64 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh tonearest binary64 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh towardzero binary64 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh upward binary64 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c7p-4 : inexact-ok
+= tanh downward intel96 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh tonearest intel96 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh towardzero intel96 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh upward intel96 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c6801p-4 : inexact-ok
+= tanh downward m68k96 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh tonearest m68k96 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh towardzero m68k96 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh upward m68k96 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c6801p-4 : inexact-ok
+= tanh downward binary128 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68000013a883f3d9p-4 : inexact-ok
+= tanh tonearest binary128 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68000013a883f3d9p-4 : inexact-ok
+= tanh towardzero binary128 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68000013a883f3d9p-4 : inexact-ok
+= tanh upward binary128 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68000013a883f3d98p-4 : inexact-ok
+= tanh downward ibm128 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68000013a883f3cp-4 : inexact-ok
+= tanh tonearest ibm128 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68000013a883f3cp-4 : inexact-ok
+= tanh towardzero ibm128 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68000013a883f3cp-4 : inexact-ok
+= tanh upward ibm128 0x3.417a22f1d468cp+0 : 0xf.f3d7dc2418c68000013a883f4p-4 : inexact-ok
+tanh -0x1.a0bd1178ea346p+1
+= tanh downward binary32 -0x3.417a2p+0 : -0xf.f3d7ep-4 : inexact-ok
+= tanh tonearest binary32 -0x3.417a2p+0 : -0xf.f3d7ep-4 : inexact-ok
+= tanh towardzero binary32 -0x3.417a2p+0 : -0xf.f3d7dp-4 : inexact-ok
+= tanh upward binary32 -0x3.417a2p+0 : -0xf.f3d7dp-4 : inexact-ok
+= tanh downward binary64 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba98p-4 : inexact-ok
+= tanh tonearest binary64 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9p-4 : inexact-ok
+= tanh towardzero binary64 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9p-4 : inexact-ok
+= tanh upward binary64 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9p-4 : inexact-ok
+= tanh downward intel96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh tonearest intel96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh towardzero intel96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh upward intel96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh downward m68k96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh tonearest m68k96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba938ap-4 : inexact-ok
+= tanh towardzero m68k96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh upward m68k96 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389p-4 : inexact-ok
+= tanh downward binary128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2af28p-4 : inexact-ok
+= tanh tonearest binary128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2af28p-4 : inexact-ok
+= tanh towardzero binary128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2af278p-4 : inexact-ok
+= tanh upward binary128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2af278p-4 : inexact-ok
+= tanh downward ibm128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2af4p-4 : inexact-ok
+= tanh tonearest ibm128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2af4p-4 : inexact-ok
+= tanh towardzero ibm128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2afp-4 : inexact-ok
+= tanh upward ibm128 -0x3.417a2p+0 : -0xf.f3d7dbdc9ba9389c568b3e2afp-4 : inexact-ok
+= tanh downward binary32 -0x3.417a24p+0 : -0xf.f3d7ep-4 : inexact-ok
+= tanh tonearest binary32 -0x3.417a24p+0 : -0xf.f3d7ep-4 : inexact-ok
+= tanh towardzero binary32 -0x3.417a24p+0 : -0xf.f3d7dp-4 : inexact-ok
+= tanh upward binary32 -0x3.417a24p+0 : -0xf.f3d7dp-4 : inexact-ok
+= tanh downward binary64 -0x3.417a24p+0 : -0xf.f3d7dc3db7d68p-4 : inexact-ok
+= tanh tonearest binary64 -0x3.417a24p+0 : -0xf.f3d7dc3db7d68p-4 : inexact-ok
+= tanh towardzero binary64 -0x3.417a24p+0 : -0xf.f3d7dc3db7d6p-4 : inexact-ok
+= tanh upward binary64 -0x3.417a24p+0 : -0xf.f3d7dc3db7d6p-4 : inexact-ok
+= tanh downward intel96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh tonearest intel96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh towardzero intel96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh upward intel96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh downward m68k96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh tonearest m68k96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664dp-4 : inexact-ok
+= tanh towardzero m68k96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh upward m68k96 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cp-4 : inexact-ok
+= tanh downward binary128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d888p-4 : inexact-ok
+= tanh tonearest binary128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d88p-4 : inexact-ok
+= tanh towardzero binary128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d88p-4 : inexact-ok
+= tanh upward binary128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d88p-4 : inexact-ok
+= tanh downward ibm128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5dcp-4 : inexact-ok
+= tanh tonearest ibm128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d8p-4 : inexact-ok
+= tanh towardzero ibm128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d8p-4 : inexact-ok
+= tanh upward ibm128 -0x3.417a24p+0 : -0xf.f3d7dc3db7d664cd14c092d5d8p-4 : inexact-ok
+= tanh downward binary64 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c7p-4 : inexact-ok
+= tanh tonearest binary64 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh towardzero binary64 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh upward binary64 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh downward intel96 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c6801p-4 : inexact-ok
+= tanh tonearest intel96 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh towardzero intel96 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh upward intel96 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh downward m68k96 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c6801p-4 : inexact-ok
+= tanh tonearest m68k96 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh towardzero m68k96 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh upward m68k96 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68p-4 : inexact-ok
+= tanh downward binary128 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68000013a883f3d98p-4 : inexact-ok
+= tanh tonearest binary128 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68000013a883f3d9p-4 : inexact-ok
+= tanh towardzero binary128 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68000013a883f3d9p-4 : inexact-ok
+= tanh upward binary128 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68000013a883f3d9p-4 : inexact-ok
+= tanh downward ibm128 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68000013a883f4p-4 : inexact-ok
+= tanh tonearest ibm128 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68000013a883f3cp-4 : inexact-ok
+= tanh towardzero ibm128 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68000013a883f3cp-4 : inexact-ok
+= tanh upward ibm128 -0x3.417a22f1d468cp+0 : -0xf.f3d7dc2418c68000013a883f3cp-4 : inexact-ok
+tanh 0x1.a0bd144ac78ap+1
+= tanh downward binary32 0x3.417a2cp+0 : 0xf.f3d7dp-4 : inexact-ok
+= tanh tonearest binary32 0x3.417a2cp+0 : 0xf.f3d7ep-4 : inexact-ok
+= tanh towardzero binary32 0x3.417a2cp+0 : 0xf.f3d7dp-4 : inexact-ok
+= tanh upward binary32 0x3.417a2cp+0 : 0xf.f3d7ep-4 : inexact-ok
+= tanh downward binary64 0x3.417a2cp+0 : 0xf.f3d7dcfff0278p-4 : inexact-ok
+= tanh tonearest binary64 0x3.417a2cp+0 : 0xf.f3d7dcfff0278p-4 : inexact-ok
+= tanh towardzero binary64 0x3.417a2cp+0 : 0xf.f3d7dcfff0278p-4 : inexact-ok
+= tanh upward binary64 0x3.417a2cp+0 : 0xf.f3d7dcfff028p-4 : inexact-ok
+= tanh downward intel96 0x3.417a2cp+0 : 0xf.f3d7dcfff027a97p-4 : inexact-ok
+= tanh tonearest intel96 0x3.417a2cp+0 : 0xf.f3d7dcfff027a97p-4 : inexact-ok
+= tanh towardzero intel96 0x3.417a2cp+0 : 0xf.f3d7dcfff027a97p-4 : inexact-ok
+= tanh upward intel96 0x3.417a2cp+0 : 0xf.f3d7dcfff027a98p-4 : inexact-ok
+= tanh downward m68k96 0x3.417a2cp+0 : 0xf.f3d7dcfff027a97p-4 : inexact-ok
+= tanh tonearest m68k96 0x3.417a2cp+0 : 0xf.f3d7dcfff027a97p-4 : inexact-ok
+= tanh towardzero m68k96 0x3.417a2cp+0 : 0xf.f3d7dcfff027a97p-4 : inexact-ok
+= tanh upward m68k96 0x3.417a2cp+0 : 0xf.f3d7dcfff027a98p-4 : inexact-ok
+= tanh downward binary128 0x3.417a2cp+0 : 0xf.f3d7dcfff027a975636a47803b1p-4 : inexact-ok
+= tanh tonearest binary128 0x3.417a2cp+0 : 0xf.f3d7dcfff027a975636a47803b18p-4 : inexact-ok
+= tanh towardzero binary128 0x3.417a2cp+0 : 0xf.f3d7dcfff027a975636a47803b1p-4 : inexact-ok
+= tanh upward binary128 0x3.417a2cp+0 : 0xf.f3d7dcfff027a975636a47803b18p-4 : inexact-ok
+= tanh downward ibm128 0x3.417a2cp+0 : 0xf.f3d7dcfff027a975636a478038p-4 : inexact-ok
+= tanh tonearest ibm128 0x3.417a2cp+0 : 0xf.f3d7dcfff027a975636a47803cp-4 : inexact-ok
+= tanh towardzero ibm128 0x3.417a2cp+0 : 0xf.f3d7dcfff027a975636a478038p-4 : inexact-ok
+= tanh upward ibm128 0x3.417a2cp+0 : 0xf.f3d7dcfff027a975636a47803cp-4 : inexact-ok
+= tanh downward binary32 0x3.417a28p+0 : 0xf.f3d7dp-4 : inexact-ok
+= tanh tonearest binary32 0x3.417a28p+0 : 0xf.f3d7ep-4 : inexact-ok
+= tanh towardzero binary32 0x3.417a28p+0 : 0xf.f3d7dp-4 : inexact-ok
+= tanh upward binary32 0x3.417a28p+0 : 0xf.f3d7ep-4 : inexact-ok
+= tanh downward binary64 0x3.417a28p+0 : 0xf.f3d7dc9ed4008p-4 : inexact-ok
+= tanh tonearest binary64 0x3.417a28p+0 : 0xf.f3d7dc9ed4008p-4 : inexact-ok
+= tanh towardzero binary64 0x3.417a28p+0 : 0xf.f3d7dc9ed4008p-4 : inexact-ok
+= tanh upward binary64 0x3.417a28p+0 : 0xf.f3d7dc9ed401p-4 : inexact-ok
+= tanh downward intel96 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a6p-4 : inexact-ok
+= tanh tonearest intel96 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a7p-4 : inexact-ok
+= tanh towardzero intel96 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a6p-4 : inexact-ok
+= tanh upward intel96 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a7p-4 : inexact-ok
+= tanh downward m68k96 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a6p-4 : inexact-ok
+= tanh tonearest m68k96 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a7p-4 : inexact-ok
+= tanh towardzero m68k96 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a6p-4 : inexact-ok
+= tanh upward m68k96 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a7p-4 : inexact-ok
+= tanh downward binary128 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a6abbb052f1fdcp-4 : inexact-ok
+= tanh tonearest binary128 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a6abbb052f1fdc8p-4 : inexact-ok
+= tanh towardzero binary128 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a6abbb052f1fdcp-4 : inexact-ok
+= tanh upward binary128 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a6abbb052f1fdc8p-4 : inexact-ok
+= tanh downward ibm128 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a6abbb052f1fcp-4 : inexact-ok
+= tanh tonearest ibm128 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a6abbb052f1fcp-4 : inexact-ok
+= tanh towardzero ibm128 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a6abbb052f1fcp-4 : inexact-ok
+= tanh upward ibm128 0x3.417a28p+0 : 0xf.f3d7dc9ed4008a6abbb052f2p-4 : inexact-ok
+= tanh downward binary64 0x3.417a28958f14p+0 : 0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh tonearest binary64 0x3.417a28958f14p+0 : 0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh towardzero binary64 0x3.417a28958f14p+0 : 0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh upward binary64 0x3.417a28958f14p+0 : 0xf.f3d7dcad02eb8p-4 : inexact-ok
+= tanh downward intel96 0x3.417a28958f14p+0 : 0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh tonearest intel96 0x3.417a28958f14p+0 : 0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh towardzero intel96 0x3.417a28958f14p+0 : 0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh upward intel96 0x3.417a28958f14p+0 : 0xf.f3d7dcad02eb001p-4 : inexact-ok
+= tanh downward m68k96 0x3.417a28958f14p+0 : 0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh tonearest m68k96 0x3.417a28958f14p+0 : 0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh towardzero m68k96 0x3.417a28958f14p+0 : 0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh upward m68k96 0x3.417a28958f14p+0 : 0xf.f3d7dcad02eb001p-4 : inexact-ok
+= tanh downward binary128 0x3.417a28958f14p+0 : 0xf.f3d7dcad02eb0000002d2b73bf8p-4 : inexact-ok
+= tanh tonearest binary128 0x3.417a28958f14p+0 : 0xf.f3d7dcad02eb0000002d2b73bf8p-4 : inexact-ok
+= tanh towardzero binary128 0x3.417a28958f14p+0 : 0xf.f3d7dcad02eb0000002d2b73bf8p-4 : inexact-ok
+= tanh upward binary128 0x3.417a28958f14p+0 : 0xf.f3d7dcad02eb0000002d2b73bf88p-4 : inexact-ok
+= tanh downward ibm128 0x3.417a28958f14p+0 : 0xf.f3d7dcad02eb0000002d2b73bcp-4 : inexact-ok
+= tanh tonearest ibm128 0x3.417a28958f14p+0 : 0xf.f3d7dcad02eb0000002d2b73cp-4 : inexact-ok
+= tanh towardzero ibm128 0x3.417a28958f14p+0 : 0xf.f3d7dcad02eb0000002d2b73bcp-4 : inexact-ok
+= tanh upward ibm128 0x3.417a28958f14p+0 : 0xf.f3d7dcad02eb0000002d2b73cp-4 : inexact-ok
+tanh -0x1.a0bd144ac78ap+1
+= tanh downward binary32 -0x3.417a28p+0 : -0xf.f3d7ep-4 : inexact-ok
+= tanh tonearest binary32 -0x3.417a28p+0 : -0xf.f3d7ep-4 : inexact-ok
+= tanh towardzero binary32 -0x3.417a28p+0 : -0xf.f3d7dp-4 : inexact-ok
+= tanh upward binary32 -0x3.417a28p+0 : -0xf.f3d7dp-4 : inexact-ok
+= tanh downward binary64 -0x3.417a28p+0 : -0xf.f3d7dc9ed401p-4 : inexact-ok
+= tanh tonearest binary64 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008p-4 : inexact-ok
+= tanh towardzero binary64 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008p-4 : inexact-ok
+= tanh upward binary64 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008p-4 : inexact-ok
+= tanh downward intel96 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a7p-4 : inexact-ok
+= tanh tonearest intel96 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a7p-4 : inexact-ok
+= tanh towardzero intel96 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a6p-4 : inexact-ok
+= tanh upward intel96 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a6p-4 : inexact-ok
+= tanh downward m68k96 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a7p-4 : inexact-ok
+= tanh tonearest m68k96 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a7p-4 : inexact-ok
+= tanh towardzero m68k96 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a6p-4 : inexact-ok
+= tanh upward m68k96 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a6p-4 : inexact-ok
+= tanh downward binary128 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a6abbb052f1fdc8p-4 : inexact-ok
+= tanh tonearest binary128 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a6abbb052f1fdc8p-4 : inexact-ok
+= tanh towardzero binary128 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a6abbb052f1fdcp-4 : inexact-ok
+= tanh upward binary128 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a6abbb052f1fdcp-4 : inexact-ok
+= tanh downward ibm128 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a6abbb052f2p-4 : inexact-ok
+= tanh tonearest ibm128 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a6abbb052f1fcp-4 : inexact-ok
+= tanh towardzero ibm128 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a6abbb052f1fcp-4 : inexact-ok
+= tanh upward ibm128 -0x3.417a28p+0 : -0xf.f3d7dc9ed4008a6abbb052f1fcp-4 : inexact-ok
+= tanh downward binary32 -0x3.417a2cp+0 : -0xf.f3d7ep-4 : inexact-ok
+= tanh tonearest binary32 -0x3.417a2cp+0 : -0xf.f3d7ep-4 : inexact-ok
+= tanh towardzero binary32 -0x3.417a2cp+0 : -0xf.f3d7dp-4 : inexact-ok
+= tanh upward binary32 -0x3.417a2cp+0 : -0xf.f3d7dp-4 : inexact-ok
+= tanh downward binary64 -0x3.417a2cp+0 : -0xf.f3d7dcfff028p-4 : inexact-ok
+= tanh tonearest binary64 -0x3.417a2cp+0 : -0xf.f3d7dcfff0278p-4 : inexact-ok
+= tanh towardzero binary64 -0x3.417a2cp+0 : -0xf.f3d7dcfff0278p-4 : inexact-ok
+= tanh upward binary64 -0x3.417a2cp+0 : -0xf.f3d7dcfff0278p-4 : inexact-ok
+= tanh downward intel96 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a98p-4 : inexact-ok
+= tanh tonearest intel96 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a97p-4 : inexact-ok
+= tanh towardzero intel96 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a97p-4 : inexact-ok
+= tanh upward intel96 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a97p-4 : inexact-ok
+= tanh downward m68k96 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a98p-4 : inexact-ok
+= tanh tonearest m68k96 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a97p-4 : inexact-ok
+= tanh towardzero m68k96 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a97p-4 : inexact-ok
+= tanh upward m68k96 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a97p-4 : inexact-ok
+= tanh downward binary128 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a975636a47803b18p-4 : inexact-ok
+= tanh tonearest binary128 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a975636a47803b18p-4 : inexact-ok
+= tanh towardzero binary128 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a975636a47803b1p-4 : inexact-ok
+= tanh upward binary128 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a975636a47803b1p-4 : inexact-ok
+= tanh downward ibm128 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a975636a47803cp-4 : inexact-ok
+= tanh tonearest ibm128 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a975636a47803cp-4 : inexact-ok
+= tanh towardzero ibm128 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a975636a478038p-4 : inexact-ok
+= tanh upward ibm128 -0x3.417a2cp+0 : -0xf.f3d7dcfff027a975636a478038p-4 : inexact-ok
+= tanh downward binary64 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02eb8p-4 : inexact-ok
+= tanh tonearest binary64 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh towardzero binary64 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh upward binary64 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh downward intel96 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02eb001p-4 : inexact-ok
+= tanh tonearest intel96 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh towardzero intel96 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh upward intel96 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh downward m68k96 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02eb001p-4 : inexact-ok
+= tanh tonearest m68k96 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh towardzero m68k96 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh upward m68k96 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02ebp-4 : inexact-ok
+= tanh downward binary128 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02eb0000002d2b73bf88p-4 : inexact-ok
+= tanh tonearest binary128 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02eb0000002d2b73bf8p-4 : inexact-ok
+= tanh towardzero binary128 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02eb0000002d2b73bf8p-4 : inexact-ok
+= tanh upward binary128 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02eb0000002d2b73bf8p-4 : inexact-ok
+= tanh downward ibm128 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02eb0000002d2b73cp-4 : inexact-ok
+= tanh tonearest ibm128 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02eb0000002d2b73cp-4 : inexact-ok
+= tanh towardzero ibm128 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02eb0000002d2b73bcp-4 : inexact-ok
+= tanh upward ibm128 -0x3.417a28958f14p+0 : -0xf.f3d7dcad02eb0000002d2b73bcp-4 : inexact-ok
 tanh max
 = tanh downward binary32 0xf.fffffp+124 : 0xf.fffffp-4 : inexact-ok
 = tanh tonearest binary32 0xf.fffffp+124 : 0x1p+0 : inexact-ok
diff --git a/sysdeps/ieee754/dbl-64/s_tanh.c b/sysdeps/ieee754/dbl-64/s_tanh.c
index ef80b9edb6..6d57cef5b8 100644
--- a/sysdeps/ieee754/dbl-64/s_tanh.c
+++ b/sysdeps/ieee754/dbl-64/s_tanh.c
@@ -233,9 +233,11 @@ __tanh (double x)
 
       /* This branch was tested exhaustively with/without fma contraction.
 	 During this search, a failure was found with the original error
-	 bound (e = rh*0x1p-62) and x=0x1.a0112a16e9318p+1 (rndu, no fma
+	 bound (e = rh*0x1p-62) and x=+/-0x1.a0112a16e9318p+1 (rndu, no fma
+	 contraction).  Another failure was found with
+	 x=+/-0x1.a0bd10af4ac2bp+1 and e = rh*0x1.0cp-62 (rndu, no fma
 	 contraction).  */
-      double e = rh * 0x1.0bp-62;
+      double e = rh * 0x1.0dp-62;
       rh = fasttwosub (0.5, ph, &rl);
       rl -= pl;
       rh *= copysign (2, x);
-- 
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.