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

Adhemerval Zanella via Glibc-cvs <[email protected]>
Newsgroups gmane.comp.lib.glibc.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=70cc22b19c2037097f0f0cce89488763c6c49f5b

commit 70cc22b19c2037097f0f0cce89488763c6c49f5b
Author: Adhemerval Zanella <[email protected]>
Date:   Tue Aug 25 11:16:54 2026 -0500

    math: Update tanh from CORE-MATH (revision bb39e4fa)
    
    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.

Diff:
---
 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);
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.