aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-09-15 17:46:08 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-09-15 17:46:08 +0000
commit0b87419b690d1711697ed95808527400910ff997 (patch)
tree95c2f39d1c562fc25437dfb20faefbb097e094ef
parent694aabefd2eb3a0e2c5624d7feb1d7310b2bdd8b (diff)
downloadglibc-0b87419b690d1711697ed95808527400910ff997.tar.xz
glibc-0b87419b690d1711697ed95808527400910ff997.zip
Fix ctan, ctanh missing underflows (bug 18595).
Similar to various other bugs in this area, ctan and ctanh can fail to raise the underflow exception for some cases of results that are tiny and inexact. This patch forces the exception in a similar way to previous fixes. Tested for x86_64 and x86. [BZ #18595] * math/s_ctan.c (__ctan): Force underflow exception for results whose real or imaginary part has small absolute value. * math/s_ctanf.c (__ctanf): Likewise. * math/s_ctanh.c (__ctanh): Likewise. * math/s_ctanhf.c (__ctanhf): Likewise. * math/s_ctanhl.c (__ctanhl): Likewise. * math/s_ctanl.c (__ctanl): Likewise. * math/auto-libm-test-in: Do not allow missing underflow for ctan and ctanh. Add more tests of ctan and ctanh.
-rw-r--r--ChangeLog11
-rw-r--r--NEWS8
-rw-r--r--math/auto-libm-test-in26
-rw-r--r--math/auto-libm-test-out1032
-rw-r--r--math/s_ctan.c10
-rw-r--r--math/s_ctanf.c10
-rw-r--r--math/s_ctanh.c10
-rw-r--r--math/s_ctanhf.c10
-rw-r--r--math/s_ctanhl.c10
-rw-r--r--math/s_ctanl.c10
10 files changed, 923 insertions, 214 deletions
diff --git a/ChangeLog b/ChangeLog
index f807e7cf17..56782dd4a7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
2015-09-15 Joseph Myers <joseph@codesourcery.com>
+ [BZ #18595]
+ * math/s_ctan.c (__ctan): Force underflow exception for results
+ whose real or imaginary part has small absolute value.
+ * math/s_ctanf.c (__ctanf): Likewise.
+ * math/s_ctanh.c (__ctanh): Likewise.
+ * math/s_ctanhf.c (__ctanhf): Likewise.
+ * math/s_ctanhl.c (__ctanhl): Likewise.
+ * math/s_ctanl.c (__ctanl): Likewise.
+ * math/auto-libm-test-in: Do not allow missing underflow for ctan
+ and ctanh. Add more tests of ctan and ctanh.
+
[BZ #15918]
* sysdeps/ieee754/flt-32/e_hypotf.c (__ieee754_hypotf): Simplify
handling of cases where one argument is an infinity.
diff --git a/NEWS b/NEWS
index a09ba38f73..797d717fb4 100644
--- a/NEWS
+++ b/NEWS
@@ -11,10 +11,10 @@ Version 2.23
2542, 2543, 2558, 2898, 14341, 14912, 15786, 15918, 16141, 16517, 16519,
16520, 16521, 16734, 16973, 16985, 17787, 17905, 18084, 18086, 18240,
- 18265, 18370, 18421, 18480, 18525, 18610, 18618, 18647, 18661, 18674,
- 18675, 18681, 18757, 18778, 18781, 18787, 18789, 18790, 18795, 18796,
- 18820, 18823, 18824, 18863, 18870, 18873, 18875, 18887, 18921, 18952,
- 18961, 18966.
+ 18265, 18370, 18421, 18480, 18525, 18595, 18610, 18618, 18647, 18661,
+ 18674, 18675, 18681, 18757, 18778, 18781, 18787, 18789, 18790, 18795,
+ 18796, 18820, 18823, 18824, 18863, 18870, 18873, 18875, 18887, 18921,
+ 18952, 18961, 18966.
* The obsolete header <regexp.h> has been removed. Programs that require
this header must be updated to use <regex.h> instead.
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 4a8017c49a..8e236c3250 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -1245,11 +1245,14 @@ ctan 0x1.921fb6p+0 0x1p-149
ctan 0x1.921fb54442d18p+0 0x1p-1074
ctan 0x1.921fb54442d1846ap+0 0x1p-16445
-# Bug 18595: underflow exception may be missing
-ctan min 0 missing-underflow
-ctan -min 0 missing-underflow
-ctan min_subnorm 0 missing-underflow
-ctan -min_subnorm 0 missing-underflow
+ctan min 0
+ctan -min 0
+ctan min_subnorm 0
+ctan -min_subnorm 0
+ctan 0 min
+ctan 0 -min
+ctan 0 min_subnorm
+ctan 0 -min_subnorm
ctanh 0 0
ctanh 0 -0
@@ -1285,11 +1288,14 @@ ctanh 0x1p-149 0x1.921fb6p+0
ctanh 0x1p-1074 0x1.921fb54442d18p+0
ctanh 0x1p-16445 0x1.921fb54442d1846ap+0
-# Bug 18595: underflow exception may be missing
-ctanh 0 min missing-underflow
-ctanh 0 -min missing-underflow
-ctanh 0 min_subnorm missing-underflow
-ctanh 0 -min_subnorm missing-underflow
+ctanh 0 min
+ctanh 0 -min
+ctanh 0 min_subnorm
+ctanh 0 -min_subnorm
+ctanh min 0
+ctanh -min 0
+ctanh min_subnorm 0
+ctanh -min_subnorm 0
erf 0
erf -0
diff --git a/math/auto-libm-test-out b/math/auto-libm-test-out
index a93b7c432f..94efbb9f9c 100644
--- a/math/auto-libm-test-out
+++ b/math/auto-libm-test-out
@@ -109184,7 +109184,7 @@ ctan 0x1.921fb54442d1846ap+0 0x1p-16445
= ctan tonearest ldbl-128 0x1.921fb54442d1846ap+0L 0x8p-16448L : -0x2.29478136aaf68d7b3b807fb349bap+64L 0x2.55e3001b8e1413fcf7193625f37ap-16316L : inexact-ok
= ctan towardzero ldbl-128 0x1.921fb54442d1846ap+0L 0x8p-16448L : -0x2.29478136aaf68d7b3b807fb349bap+64L 0x2.55e3001b8e1413fcf7193625f378p-16316L : inexact-ok
= ctan upward ldbl-128 0x1.921fb54442d1846ap+0L 0x8p-16448L : -0x2.29478136aaf68d7b3b807fb349bap+64L 0x2.55e3001b8e1413fcf7193625f37ap-16316L : inexact-ok
-ctan min 0 missing-underflow
+ctan min 0
= ctan downward flt-32 0x4p-128f 0x0p+0f : 0x4p-128f 0x0p+0f : inexact-ok underflow-ok errno-erange-ok
= ctan tonearest flt-32 0x4p-128f 0x0p+0f : 0x4p-128f 0x0p+0f : inexact-ok underflow-ok errno-erange-ok
= ctan towardzero flt-32 0x4p-128f 0x0p+0f : 0x4p-128f 0x0p+0f : inexact-ok underflow-ok errno-erange-ok
@@ -109225,10 +109225,10 @@ ctan min 0 missing-underflow
= ctan tonearest ldbl-128 0x4p-1024L 0x0p+0L : 0x4p-1024L 0x0p+0L : inexact-ok
= ctan towardzero ldbl-128 0x4p-1024L 0x0p+0L : 0x4p-1024L 0x0p+0L : inexact-ok
= ctan upward ldbl-128 0x4p-1024L 0x0p+0L : 0x4.0000000000000000000000000004p-1024L 0x0p+0L : inexact-ok
-= ctan downward ldbl-128ibm 0x4p-1024L 0x0p+0L : 0x4p-1024L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-128ibm 0x4p-1024L 0x0p+0L : 0x4p-1024L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-128ibm 0x4p-1024L 0x0p+0L : 0x4p-1024L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-128ibm 0x4p-1024L 0x0p+0L : 0x4.0000000000004p-1024L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
+= ctan downward ldbl-128ibm 0x4p-1024L 0x0p+0L : 0x4p-1024L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan tonearest ldbl-128ibm 0x4p-1024L 0x0p+0L : 0x4p-1024L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan towardzero ldbl-128ibm 0x4p-1024L 0x0p+0L : 0x4p-1024L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan upward ldbl-128ibm 0x4p-1024L 0x0p+0L : 0x4.0000000000004p-1024L 0x0p+0L : inexact-ok underflow errno-erange-ok
= ctan downward ldbl-96-intel 0x4p-16384L 0x0p+0L : 0x4p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan tonearest ldbl-96-intel 0x4p-16384L 0x0p+0L : 0x4p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan towardzero ldbl-96-intel 0x4p-16384L 0x0p+0L : 0x4p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
@@ -109241,18 +109241,18 @@ ctan min 0 missing-underflow
= ctan tonearest ldbl-128 0x4p-16384L 0x0p+0L : 0x4p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan towardzero ldbl-128 0x4p-16384L 0x0p+0L : 0x4p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan upward ldbl-128 0x4p-16384L 0x0p+0L : 0x4.0000000000000000000000000004p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
-= ctan downward ldbl-96-intel 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-96-intel 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-96-intel 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-96-intel 0x2p-16384L 0x0p+0L : 0x2.0000000000000008p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
+= ctan downward ldbl-96-intel 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan tonearest ldbl-96-intel 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan towardzero ldbl-96-intel 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan upward ldbl-96-intel 0x2p-16384L 0x0p+0L : 0x2.0000000000000008p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
= ctan downward ldbl-96-m68k 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan tonearest ldbl-96-m68k 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan towardzero ldbl-96-m68k 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan upward ldbl-96-m68k 0x2p-16384L 0x0p+0L : 0x2.0000000000000004p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
-= ctan downward ldbl-128 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-128 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-128 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-128 0x2p-16384L 0x0p+0L : 0x2.0000000000000000000000000004p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
+= ctan downward ldbl-128 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan tonearest ldbl-128 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan towardzero ldbl-128 0x2p-16384L 0x0p+0L : 0x2p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan upward ldbl-128 0x2p-16384L 0x0p+0L : 0x2.0000000000000000000000000004p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
= ctan downward dbl-64 0x8p-972 0x0p+0 : 0x8p-972 0x0p+0 : inexact-ok
= ctan tonearest dbl-64 0x8p-972 0x0p+0 : 0x8p-972 0x0p+0 : inexact-ok
= ctan towardzero dbl-64 0x8p-972 0x0p+0 : 0x8p-972 0x0p+0 : inexact-ok
@@ -109273,7 +109273,7 @@ ctan min 0 missing-underflow
= ctan tonearest ldbl-128ibm 0x8p-972L 0x0p+0L : 0x8p-972L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan towardzero ldbl-128ibm 0x8p-972L 0x0p+0L : 0x8p-972L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan upward ldbl-128ibm 0x8p-972L 0x0p+0L : 0x8.00000000000000000000000004p-972L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
-ctan -min 0 missing-underflow
+ctan -min 0
= ctan downward flt-32 -0x4p-128f 0x0p+0f : -0x4.000008p-128f 0x0p+0f : inexact-ok underflow-ok errno-erange-ok
= ctan tonearest flt-32 -0x4p-128f 0x0p+0f : -0x4p-128f 0x0p+0f : inexact-ok underflow-ok errno-erange-ok
= ctan towardzero flt-32 -0x4p-128f 0x0p+0f : -0x4p-128f 0x0p+0f : inexact-ok underflow-ok errno-erange-ok
@@ -109314,10 +109314,10 @@ ctan -min 0 missing-underflow
= ctan tonearest ldbl-128 -0x4p-1024L 0x0p+0L : -0x4p-1024L 0x0p+0L : inexact-ok
= ctan towardzero ldbl-128 -0x4p-1024L 0x0p+0L : -0x4p-1024L 0x0p+0L : inexact-ok
= ctan upward ldbl-128 -0x4p-1024L 0x0p+0L : -0x4p-1024L 0x0p+0L : inexact-ok
-= ctan downward ldbl-128ibm -0x4p-1024L 0x0p+0L : -0x4.0000000000004p-1024L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-128ibm -0x4p-1024L 0x0p+0L : -0x4p-1024L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-128ibm -0x4p-1024L 0x0p+0L : -0x4p-1024L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-128ibm -0x4p-1024L 0x0p+0L : -0x4p-1024L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
+= ctan downward ldbl-128ibm -0x4p-1024L 0x0p+0L : -0x4.0000000000004p-1024L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan tonearest ldbl-128ibm -0x4p-1024L 0x0p+0L : -0x4p-1024L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan towardzero ldbl-128ibm -0x4p-1024L 0x0p+0L : -0x4p-1024L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan upward ldbl-128ibm -0x4p-1024L 0x0p+0L : -0x4p-1024L 0x0p+0L : inexact-ok underflow errno-erange-ok
= ctan downward ldbl-96-intel -0x4p-16384L 0x0p+0L : -0x4.0000000000000008p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan tonearest ldbl-96-intel -0x4p-16384L 0x0p+0L : -0x4p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan towardzero ldbl-96-intel -0x4p-16384L 0x0p+0L : -0x4p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
@@ -109330,18 +109330,18 @@ ctan -min 0 missing-underflow
= ctan tonearest ldbl-128 -0x4p-16384L 0x0p+0L : -0x4p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan towardzero ldbl-128 -0x4p-16384L 0x0p+0L : -0x4p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan upward ldbl-128 -0x4p-16384L 0x0p+0L : -0x4p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
-= ctan downward ldbl-96-intel -0x2p-16384L 0x0p+0L : -0x2.0000000000000008p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-96-intel -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-96-intel -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-96-intel -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
+= ctan downward ldbl-96-intel -0x2p-16384L 0x0p+0L : -0x2.0000000000000008p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan tonearest ldbl-96-intel -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan towardzero ldbl-96-intel -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan upward ldbl-96-intel -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
= ctan downward ldbl-96-m68k -0x2p-16384L 0x0p+0L : -0x2.0000000000000004p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan tonearest ldbl-96-m68k -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan towardzero ldbl-96-m68k -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan upward ldbl-96-m68k -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
-= ctan downward ldbl-128 -0x2p-16384L 0x0p+0L : -0x2.0000000000000000000000000004p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-128 -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-128 -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-128 -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
+= ctan downward ldbl-128 -0x2p-16384L 0x0p+0L : -0x2.0000000000000000000000000004p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan tonearest ldbl-128 -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan towardzero ldbl-128 -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan upward ldbl-128 -0x2p-16384L 0x0p+0L : -0x2p-16384L 0x0p+0L : inexact-ok underflow errno-erange-ok
= ctan downward dbl-64 -0x8p-972 0x0p+0 : -0x8.0000000000008p-972 0x0p+0 : inexact-ok
= ctan tonearest dbl-64 -0x8p-972 0x0p+0 : -0x8p-972 0x0p+0 : inexact-ok
= ctan towardzero dbl-64 -0x8p-972 0x0p+0 : -0x8p-972 0x0p+0 : inexact-ok
@@ -109362,11 +109362,11 @@ ctan -min 0 missing-underflow
= ctan tonearest ldbl-128ibm -0x8p-972L 0x0p+0L : -0x8p-972L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan towardzero ldbl-128ibm -0x8p-972L 0x0p+0L : -0x8p-972L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
= ctan upward ldbl-128ibm -0x8p-972L 0x0p+0L : -0x8p-972L 0x0p+0L : inexact-ok underflow-ok errno-erange-ok
-ctan min_subnorm 0 missing-underflow
-= ctan downward flt-32 0x8p-152f 0x0p+0f : 0x8p-152f 0x0p+0f : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest flt-32 0x8p-152f 0x0p+0f : 0x8p-152f 0x0p+0f : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero flt-32 0x8p-152f 0x0p+0f : 0x8p-152f 0x0p+0f : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward flt-32 0x8p-152f 0x0p+0f : 0x1p-148f 0x0p+0f : inexact-ok underflow underflow-ok errno-erange-ok
+ctan min_subnorm 0
+= ctan downward flt-32 0x8p-152f 0x0p+0f : 0x8p-152f 0x0p+0f : inexact-ok underflow errno-erange-ok
+= ctan tonearest flt-32 0x8p-152f 0x0p+0f : 0x8p-152f 0x0p+0f : inexact-ok underflow errno-erange-ok
+= ctan towardzero flt-32 0x8p-152f 0x0p+0f : 0x8p-152f 0x0p+0f : inexact-ok underflow errno-erange-ok
+= ctan upward flt-32 0x8p-152f 0x0p+0f : 0x1p-148f 0x0p+0f : inexact-ok underflow errno-erange-ok
= ctan downward dbl-64 0x8p-152 0x0p+0 : 0x8p-152 0x0p+0 : inexact-ok
= ctan tonearest dbl-64 0x8p-152 0x0p+0 : 0x8p-152 0x0p+0 : inexact-ok
= ctan towardzero dbl-64 0x8p-152 0x0p+0 : 0x8p-152 0x0p+0 : inexact-ok
@@ -109387,10 +109387,10 @@ ctan min_subnorm 0 missing-underflow
= ctan tonearest ldbl-128ibm 0x8p-152L 0x0p+0L : 0x8p-152L 0x0p+0L : inexact-ok
= ctan towardzero ldbl-128ibm 0x8p-152L 0x0p+0L : 0x8p-152L 0x0p+0L : inexact-ok
= ctan upward ldbl-128ibm 0x8p-152L 0x0p+0L : 0x8.00000000000000000000000004p-152L 0x0p+0L : inexact-ok
-= ctan downward dbl-64 0x4p-1076 0x0p+0 : 0x4p-1076 0x0p+0 : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest dbl-64 0x4p-1076 0x0p+0 : 0x4p-1076 0x0p+0 : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero dbl-64 0x4p-1076 0x0p+0 : 0x4p-1076 0x0p+0 : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward dbl-64 0x4p-1076 0x0p+0 : 0x8p-1076 0x0p+0 : inexact-ok underflow underflow-ok errno-erange-ok
+= ctan downward dbl-64 0x4p-1076 0x0p+0 : 0x4p-1076 0x0p+0 : inexact-ok underflow errno-erange-ok
+= ctan tonearest dbl-64 0x4p-1076 0x0p+0 : 0x4p-1076 0x0p+0 : inexact-ok underflow errno-erange-ok
+= ctan towardzero dbl-64 0x4p-1076 0x0p+0 : 0x4p-1076 0x0p+0 : inexact-ok underflow errno-erange-ok
+= ctan upward dbl-64 0x4p-1076 0x0p+0 : 0x8p-1076 0x0p+0 : inexact-ok underflow errno-erange-ok
= ctan downward ldbl-96-intel 0x4p-1076L 0x0p+0L : 0x4p-1076L 0x0p+0L : inexact-ok
= ctan tonearest ldbl-96-intel 0x4p-1076L 0x0p+0L : 0x4p-1076L 0x0p+0L : inexact-ok
= ctan towardzero ldbl-96-intel 0x4p-1076L 0x0p+0L : 0x4p-1076L 0x0p+0L : inexact-ok
@@ -109403,39 +109403,39 @@ ctan min_subnorm 0 missing-underflow
= ctan tonearest ldbl-128 0x4p-1076L 0x0p+0L : 0x4p-1076L 0x0p+0L : inexact-ok
= ctan towardzero ldbl-128 0x4p-1076L 0x0p+0L : 0x4p-1076L 0x0p+0L : inexact-ok
= ctan upward ldbl-128 0x4p-1076L 0x0p+0L : 0x4.0000000000000000000000000004p-1076L 0x0p+0L : inexact-ok
-= ctan downward ldbl-128ibm 0x4p-1076L 0x0p+0L : 0x4p-1076L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-128ibm 0x4p-1076L 0x0p+0L : 0x4p-1076L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-128ibm 0x4p-1076L 0x0p+0L : 0x4p-1076L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-128ibm 0x4p-1076L 0x0p+0L : 0x8p-1076L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan downward ldbl-96-intel 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-96-intel 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-96-intel 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-96-intel 0x8p-16448L 0x0p+0L : 0x1p-16444L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan downward ldbl-96-m68k 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-96-m68k 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-96-m68k 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-96-m68k 0x8p-16448L 0x0p+0L : 0xcp-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan downward ldbl-128 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-128 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-128 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-128 0x8p-16448L 0x0p+0L : 0x8.000000000004p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan downward ldbl-96-m68k 0x4p-16448L 0x0p+0L : 0x4p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-96-m68k 0x4p-16448L 0x0p+0L : 0x4p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-96-m68k 0x4p-16448L 0x0p+0L : 0x4p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-96-m68k 0x4p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan downward ldbl-128 0x4p-16448L 0x0p+0L : 0x4p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-128 0x4p-16448L 0x0p+0L : 0x4p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-128 0x4p-16448L 0x0p+0L : 0x4p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-128 0x4p-16448L 0x0p+0L : 0x4.000000000004p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan downward ldbl-128 0x4p-16496L 0x0p+0L : 0x4p-16496L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-128 0x4p-16496L 0x0p+0L : 0x4p-16496L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-128 0x4p-16496L 0x0p+0L : 0x4p-16496L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-128 0x4p-16496L 0x0p+0L : 0x8p-16496L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-ctan -min_subnorm 0 missing-underflow
-= ctan downward flt-32 -0x8p-152f 0x0p+0f : -0x1p-148f 0x0p+0f : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest flt-32 -0x8p-152f 0x0p+0f : -0x8p-152f 0x0p+0f : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero flt-32 -0x8p-152f 0x0p+0f : -0x8p-152f 0x0p+0f : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward flt-32 -0x8p-152f 0x0p+0f : -0x8p-152f 0x0p+0f : inexact-ok underflow underflow-ok errno-erange-ok
+= ctan downward ldbl-128ibm 0x4p-1076L 0x0p+0L : 0x4p-1076L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan tonearest ldbl-128ibm 0x4p-1076L 0x0p+0L : 0x4p-1076L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan towardzero ldbl-128ibm 0x4p-1076L 0x0p+0L : 0x4p-1076L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan upward ldbl-128ibm 0x4p-1076L 0x0p+0L : 0x8p-1076L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan downward ldbl-96-intel 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan tonearest ldbl-96-intel 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan towardzero ldbl-96-intel 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan upward ldbl-96-intel 0x8p-16448L 0x0p+0L : 0x1p-16444L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan downward ldbl-96-m68k 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan tonearest ldbl-96-m68k 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan towardzero ldbl-96-m68k 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan upward ldbl-96-m68k 0x8p-16448L 0x0p+0L : 0xcp-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan downward ldbl-128 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan tonearest ldbl-128 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan towardzero ldbl-128 0x8p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan upward ldbl-128 0x8p-16448L 0x0p+0L : 0x8.000000000004p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan downward ldbl-96-m68k 0x4p-16448L 0x0p+0L : 0x4p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan tonearest ldbl-96-m68k 0x4p-16448L 0x0p+0L : 0x4p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan towardzero ldbl-96-m68k 0x4p-16448L 0x0p+0L : 0x4p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan upward ldbl-96-m68k 0x4p-16448L 0x0p+0L : 0x8p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan downward ldbl-128 0x4p-16448L 0x0p+0L : 0x4p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan tonearest ldbl-128 0x4p-16448L 0x0p+0L : 0x4p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan towardzero ldbl-128 0x4p-16448L 0x0p+0L : 0x4p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan upward ldbl-128 0x4p-16448L 0x0p+0L : 0x4.000000000004p-16448L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan downward ldbl-128 0x4p-16496L 0x0p+0L : 0x4p-16496L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan tonearest ldbl-128 0x4p-16496L 0x0p+0L : 0x4p-16496L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan towardzero ldbl-128 0x4p-16496L 0x0p+0L : 0x4p-16496L 0x0p+0L : inexact-ok underflow errno-erange-ok
+= ctan upward ldbl-128 0x4p-16496L 0x0p+0L : 0x8p-16496L 0x0p+0L : inexact-ok underflow errno-erange-ok
+ctan -min_subnorm 0
+= ctan downward flt-32 -0x8p-152f 0x0p+0f : -0x1p-148f 0x0p+0f : inexact-ok underflow errno-erange-ok
+= ctan tonearest flt-32 -0x8p-152f 0x0p+0f : -0x8p-152f 0x0p+0f : inexact-ok underflow errno-erange-ok
+= ctan towardzero flt-32 -0x8p-152f 0x0p+0f : -0x8p-152f 0x0p+0f : inexact-ok underflow errno-erange-ok
+= ctan upward flt-32 -0x8p-152f 0x0p+0f : -0x8p-152f 0x0p+0f : inexact-ok underflow errno-erange-ok
= ctan downward dbl-64 -0x8p-152 0x0p+0 : -0x8.0000000000008p-152 0x0p+0 : inexact-ok
= ctan tonearest dbl-64 -0x8p-152 0x0p+0 : -0x8p-152 0x0p+0 : inexact-ok
= ctan towardzero dbl-64 -0x8p-152 0x0p+0 : -0x8p-152 0x0p+0 : inexact-ok
@@ -109456,10 +109456,10 @@ ctan -min_subnorm 0 missing-underflow
= ctan tonearest ldbl-128ibm -0x8p-152L 0x0p+0L : -0x8p-152L 0x0p+0L : inexact-ok
= ctan towardzero ldbl-128ibm -0x8p-152L 0x0p+0L : -0x8p-152L 0x0p+0L : inexact-ok
= ctan upward ldbl-128ibm -0x8p-152L 0x0p+0L : -0x8p-152L 0x0p+0L : inexact-ok
-= ctan downward dbl-64 -0x4p-1076 0x0p+0 : -0x8p-1076 0x0p+0 : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest dbl-64 -0x4p-1076 0x0p+0 : -0x4p-1076 0x0p+0 : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero dbl-64 -0x4p-1076 0x0p+0 : -0x4p-1076 0x0p+0 : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward dbl-64 -0x4p-1076 0x0p+0 : -0x4p-1076 0x0p+0 : inexact-ok underflow underflow-ok errno-erange-ok
+= ctan downward dbl-64 -0x4p-1076 0x0p+0 : -0x8p-1076 0x0p+0 : inexact-ok underflow errno-erange-ok
+= ctan tonearest dbl-64 -0x4p-1076 0x0p+0 : -0x4p-1076 0x0p+0 : inexact-ok underflow errno-erange-ok
+= ctan towardzero dbl-64 -0x4p-1076 0x0p+0 : -0x4p-1076 0x0p+0 : inexact-ok underflow errno-erange-ok
+= ctan upward dbl-64 -0x4p-1076 0x0p+0 : -0x4p-1076 0x0p+0 : inexact-ok underflow errno-erange-ok
= ctan downward ldbl-96-intel -0x4p-1076L 0x0p+0L : -0x4.0000000000000008p-1076L 0x0p+0L : inexact-ok
= ctan tonearest ldbl-96-intel -0x4p-1076L 0x0p+0L : -0x4p-1076L 0x0p+0L : inexact-ok
= ctan towardzero ldbl-96-intel -0x4p-1076L 0x0p+0L : -0x4p-1076L 0x0p+0L : inexact-ok
@@ -109472,34 +109472,350 @@ ctan -min_subnorm 0 missing-underflow
= ctan tonearest ldbl-128 -0x4p-1076L 0x0p+0L : -0x4p-1076L 0x0p+0L : inexact-ok
= ctan towardzero ldbl-128 -0x4p-1076L 0x0p+0L : -0x4p-1076L 0x0p+0L : inexact-ok
= ctan upward ldbl-128 -0x4p-1076L 0x0p+0L : -0x4p-1076L 0x0p+0L : inexact-ok
-= ctan downward ldbl-128ibm -0x4p-1076L 0x0p+0L : -0x8p-1076L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-128ibm -0x4p-1076L 0x0p+0L : -0x4p-1076L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-128ibm -0x4p-1076L 0x0p+0L : -0x4p-1076L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-128ibm -0x4p-1076L 0x0p+0L : -0x4p-1076L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan downward ldbl-96-intel -0x8p-16448L 0x0p+0L : -0x1p-16444L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan tonearest ldbl-96-intel -0x8p-16448L 0x0p+0L : -0x8p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan towardzero ldbl-96-intel -0x8p-16448L 0x0p+0L : -0x8p-16448L 0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= ctan upward ldbl-96-intel -0x8p-16448L 0x0p+0L : -0x8p-16448L 0x0p+0L : inexact-ok underflow underfl