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

Adhemerval Zanella adhemerval.zanella@linaro.org
Tue Aug 25 17:50:51 GMT 2026


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



More information about the Libc-alpha mailing list