aboutsummaryrefslogtreecommitdiff
path: root/math
diff options
context:
space:
mode:
authorPaul Zimmermann <Paul.Zimmermann@inria.fr>2021-04-01 08:14:10 +0200
committerPaul Zimmermann <Paul.Zimmermann@inria.fr>2021-04-02 06:15:48 +0200
commit9acda61d94acc5348c2330f2519a14d1a4a37e73 (patch)
treedcad90e95870279c37b5be7c646b3a3f6edc15cb /math
parent595c22ecd8e87a27fd19270ed30fdbae9ad25426 (diff)
downloadglibc-9acda61d94acc5348c2330f2519a14d1a4a37e73.zip
glibc-9acda61d94acc5348c2330f2519a14d1a4a37e73.tar.gz
glibc-9acda61d94acc5348c2330f2519a14d1a4a37e73.tar.bz2
Fix the inaccuracy of j0f/j1f/y0f/y1f [BZ #14469, #14470, #14471, #14472]
For j0f/j1f/y0f/y1f, the largest error for all binary32 inputs is reduced to at most 9 ulps for all rounding modes. The new code is enabled only when there is a cancellation at the very end of the j0f/j1f/y0f/y1f computation, or for very large inputs, thus should not give any visible slowdown on average. Two different algorithms are used: * around the first 64 zeros of j0/j1/y0/y1, approximation polynomials of degree 3 are used, computed using the Sollya tool (https://www.sollya.org/) * for large inputs, an asymptotic formula from [1] is used [1] Fast and Accurate Bessel Function Computation, John Harrison, Proceedings of Arith 19, 2009. Inputs yielding the new largest errors are added to auto-libm-test-in, and ulps are regenerated for various targets (thanks Adhemerval Zanella). Tested on x86_64 with --disable-multi-arch and on powerpc64le-linux-gnu. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'math')
-rw-r--r--math/auto-libm-test-in20
-rw-r--r--math/auto-libm-test-out-j050
-rw-r--r--math/auto-libm-test-out-j150
-rw-r--r--math/auto-libm-test-out-y050
-rw-r--r--math/auto-libm-test-out-y175
5 files changed, 242 insertions, 3 deletions
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 4edaaa8..9fbd0c6 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -5790,8 +5790,11 @@ j0 -0x1.001000001p+593
j0 0x1p1023
j0 0x1p16382
j0 0x1p16383
-# the next value generates larger error bounds on x86_64 (binary32)
+# the next values yield large errors for binary32
+# (cf BZ #27670 for the xfail entry)
j0 0x2.602774p+0 xfail-rounding:ibm128-libgcc
+j0 0x1.04c39cp+6
+j0 0x1.4b7066p+7
# the next value exercises the flt-32 code path for x >= 2^127
j0 0x8.2f4ecp+124
@@ -5825,8 +5828,11 @@ j1 0x1p-60
j1 0x1p-100
j1 0x1p-600
j1 0x1p-10000
-# the next value generates larger error bounds on x86_64 (binary32)
+# the next values yield large errors in the binary32 format
+# (cf BZ #27670 for the xfail entries)
j1 0x3.ae4b2p+0 xfail-rounding:ibm128-libgcc
+j1 0x1.2f28eap+7 xfail-rounding:binary64 xfail-rounding:binary128 xfail-rounding:intel96 xfail-rounding:ibm128-libgcc
+j1 0x1.a1d20ap+6 xfail-rounding:binary128 xfail-rounding:intel96 xfail-rounding:ibm128-libgcc
j1 min
j1 -min
j1 min_subnorm
@@ -8273,8 +8279,11 @@ y0 0x1p-100
y0 0x1p-110
y0 0x1p-600
y0 0x1p-10000
-# the next value generates larger error bounds on x86_64 (binary32)
+# the next values yield large errors for binary32
+# (cf BZ #16492 for the xfail entries)
y0 0xd.3432bp-4
+y0 0x1.33eaacp+5 xfail:binary64 xfail:intel96 xfail-rounding:ibm128-libgcc
+y0 0x1.a681cep-1 xfail-rounding:ibm128-libgcc
y0 min
y0 min_subnorm
@@ -8303,6 +8312,11 @@ y1 0x1p-100
y1 0x1p-110
y1 0x1p-600
y1 0x1p-10000
+# the next three values yield the largest error in the binary32 format
+# (cf BZ #27670 for the xfail entries)
+y1 0x1.065194p+7 xfail-rounding:binary64 xfail-rounding:intel96 xfail-rounding:ibm128-libgcc
+y1 0x1.c1badep+0 xfail-rounding:ibm128-libgcc
+y1 0x1.c1bc2ep+0
y1 min
y1 min_subnorm
diff --git a/math/auto-libm-test-out-j0 b/math/auto-libm-test-out-j0
index cc1fea0..85c4148 100644
--- a/math/auto-libm-test-out-j0
+++ b/math/auto-libm-test-out-j0
@@ -1359,6 +1359,56 @@ j0 0x2.602774p+0 xfail-rounding:ibm128-libgcc
= j0 tonearest ibm128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : inexact-ok
= j0 towardzero ibm128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : xfail:ibm128-libgcc inexact-ok
= j0 upward ibm128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab8p-8 : xfail:ibm128-libgcc inexact-ok
+j0 0x1.04c39cp+6
+= j0 downward binary32 0x4.130e7p+4 : -0x6.dd65d8p-16 : inexact-ok
+= j0 tonearest binary32 0x4.130e7p+4 : -0x6.dd65dp-16 : inexact-ok
+= j0 towardzero binary32 0x4.130e7p+4 : -0x6.dd65dp-16 : inexact-ok
+= j0 upward binary32 0x4.130e7p+4 : -0x6.dd65dp-16 : inexact-ok
+= j0 downward binary64 0x4.130e7p+4 : -0x6.dd65d0005a19p-16 : inexact-ok
+= j0 tonearest binary64 0x4.130e7p+4 : -0x6.dd65d0005a18cp-16 : inexact-ok
+= j0 towardzero binary64 0x4.130e7p+4 : -0x6.dd65d0005a18cp-16 : inexact-ok
+= j0 upward binary64 0x4.130e7p+4 : -0x6.dd65d0005a18cp-16 : inexact-ok
+= j0 downward intel96 0x4.130e7p+4 : -0x6.dd65d0005a18c04p-16 : inexact-ok
+= j0 tonearest intel96 0x4.130e7p+4 : -0x6.dd65d0005a18c04p-16 : inexact-ok
+= j0 towardzero intel96 0x4.130e7p+4 : -0x6.dd65d0005a18c038p-16 : inexact-ok
+= j0 upward intel96 0x4.130e7p+4 : -0x6.dd65d0005a18c038p-16 : inexact-ok
+= j0 downward m68k96 0x4.130e7p+4 : -0x6.dd65d0005a18c04p-16 : inexact-ok
+= j0 tonearest m68k96 0x4.130e7p+4 : -0x6.dd65d0005a18c04p-16 : inexact-ok
+= j0 towardzero m68k96 0x4.130e7p+4 : -0x6.dd65d0005a18c038p-16 : inexact-ok
+= j0 upward m68k96 0x4.130e7p+4 : -0x6.dd65d0005a18c038p-16 : inexact-ok
+= j0 downward binary128 0x4.130e7p+4 : -0x6.dd65d0005a18c03fc1c61141bb64p-16 : inexact-ok
+= j0 tonearest binary128 0x4.130e7p+4 : -0x6.dd65d0005a18c03fc1c61141bb6p-16 : inexact-ok
+= j0 towardzero binary128 0x4.130e7p+4 : -0x6.dd65d0005a18c03fc1c61141bb6p-16 : inexact-ok
+= j0 upward binary128 0x4.130e7p+4 : -0x6.dd65d0005a18c03fc1c61141bb6p-16 : inexact-ok
+= j0 downward ibm128 0x4.130e7p+4 : -0x6.dd65d0005a18c03fc1c61141bcp-16 : inexact-ok
+= j0 tonearest ibm128 0x4.130e7p+4 : -0x6.dd65d0005a18c03fc1c61141bcp-16 : inexact-ok
+= j0 towardzero ibm128 0x4.130e7p+4 : -0x6.dd65d0005a18c03fc1c61141bap-16 : inexact-ok
+= j0 upward ibm128 0x4.130e7p+4 : -0x6.dd65d0005a18c03fc1c61141bap-16 : inexact-ok
+j0 0x1.4b7066p+7
+= j0 downward binary32 0xa.5b833p+4 : 0xf.80edp-20 : inexact-ok
+= j0 tonearest binary32 0xa.5b833p+4 : 0xf.80edp-20 : inexact-ok
+= j0 towardzero binary32 0xa.5b833p+4 : 0xf.80edp-20 : inexact-ok
+= j0 upward binary32 0xa.5b833p+4 : 0xf.80ed1p-20 : inexact-ok
+= j0 downward binary64 0xa.5b833p+4 : 0xf.80ed0055a8e58p-20 : inexact-ok
+= j0 tonearest binary64 0xa.5b833p+4 : 0xf.80ed0055a8e6p-20 : inexact-ok
+= j0 towardzero binary64 0xa.5b833p+4 : 0xf.80ed0055a8e58p-20 : inexact-ok
+= j0 upward binary64 0xa.5b833p+4 : 0xf.80ed0055a8e6p-20 : inexact-ok
+= j0 downward intel96 0xa.5b833p+4 : 0xf.80ed0055a8e5c88p-20 : inexact-ok
+= j0 tonearest intel96 0xa.5b833p+4 : 0xf.80ed0055a8e5c89p-20 : inexact-ok
+= j0 towardzero intel96 0xa.5b833p+4 : 0xf.80ed0055a8e5c88p-20 : inexact-ok
+= j0 upward intel96 0xa.5b833p+4 : 0xf.80ed0055a8e5c89p-20 : inexact-ok
+= j0 downward m68k96 0xa.5b833p+4 : 0xf.80ed0055a8e5c88p-20 : inexact-ok
+= j0 tonearest m68k96 0xa.5b833p+4 : 0xf.80ed0055a8e5c89p-20 : inexact-ok
+= j0 towardzero m68k96 0xa.5b833p+4 : 0xf.80ed0055a8e5c88p-20 : inexact-ok
+= j0 upward m68k96 0xa.5b833p+4 : 0xf.80ed0055a8e5c89p-20 : inexact-ok
+= j0 downward binary128 0xa.5b833p+4 : 0xf.80ed0055a8e5c88af9c0edfe12ap-20 : inexact-ok
+= j0 tonearest binary128 0xa.5b833p+4 : 0xf.80ed0055a8e5c88af9c0edfe12a8p-20 : inexact-ok
+= j0 towardzero binary128 0xa.5b833p+4 : 0xf.80ed0055a8e5c88af9c0edfe12ap-20 : inexact-ok
+= j0 upward binary128 0xa.5b833p+4 : 0xf.80ed0055a8e5c88af9c0edfe12a8p-20 : inexact-ok
+= j0 downward ibm128 0xa.5b833p+4 : 0xf.80ed0055a8e5c88af9c0edfe1p-20 : inexact-ok
+= j0 tonearest ibm128 0xa.5b833p+4 : 0xf.80ed0055a8e5c88af9c0edfe14p-20 : inexact-ok
+= j0 towardzero ibm128 0xa.5b833p+4 : 0xf.80ed0055a8e5c88af9c0edfe1p-20 : inexact-ok
+= j0 upward ibm128 0xa.5b833p+4 : 0xf.80ed0055a8e5c88af9c0edfe14p-20 : inexact-ok
j0 0x8.2f4ecp+124
= j0 downward binary32 0x8.2f4ecp+124 : 0xd.331efp-68 : inexact-ok
= j0 tonearest binary32 0x8.2f4ecp+124 : 0xd.331efp-68 : inexact-ok
diff --git a/math/auto-libm-test-out-j1 b/math/auto-libm-test-out-j1
index 6bc3bbe..f808801 100644
--- a/math/auto-libm-test-out-j1
+++ b/math/auto-libm-test-out-j1
@@ -993,6 +993,56 @@ j1 0x3.ae4b2p+0 xfail-rounding:ibm128-libgcc
= j1 tonearest ibm128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787cp-8 : inexact-ok
= j1 towardzero ibm128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787cp-8 : xfail:ibm128-libgcc inexact-ok
= j1 upward ibm128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f788p-8 : xfail:ibm128-libgcc inexact-ok
+j1 0x1.2f28eap+7 xfail-rounding:binary64 xfail-rounding:binary128 xfail-rounding:intel96 xfail-rounding:ibm128-libgcc
+= j1 downward binary32 0x9.79475p+4 : 0x2.49a6fp-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 tonearest binary32 0x9.79475p+4 : 0x2.49a6f4p-16 : inexact-ok
+= j1 towardzero binary32 0x9.79475p+4 : 0x2.49a6fp-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 upward binary32 0x9.79475p+4 : 0x2.49a6f4p-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 downward binary64 0x9.79475p+4 : 0x2.49a6f3fb00346p-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 tonearest binary64 0x9.79475p+4 : 0x2.49a6f3fb00346p-16 : inexact-ok
+= j1 towardzero binary64 0x9.79475p+4 : 0x2.49a6f3fb00346p-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 upward binary64 0x9.79475p+4 : 0x2.49a6f3fb00348p-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 downward intel96 0x9.79475p+4 : 0x2.49a6f3fb003462ap-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 tonearest intel96 0x9.79475p+4 : 0x2.49a6f3fb003462ap-16 : inexact-ok
+= j1 towardzero intel96 0x9.79475p+4 : 0x2.49a6f3fb003462ap-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 upward intel96 0x9.79475p+4 : 0x2.49a6f3fb003462a4p-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 downward m68k96 0x9.79475p+4 : 0x2.49a6f3fb003462ap-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 tonearest m68k96 0x9.79475p+4 : 0x2.49a6f3fb003462ap-16 : inexact-ok
+= j1 towardzero m68k96 0x9.79475p+4 : 0x2.49a6f3fb003462ap-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 upward m68k96 0x9.79475p+4 : 0x2.49a6f3fb003462a4p-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 downward binary128 0x9.79475p+4 : 0x2.49a6f3fb003462a1f15135cec05ap-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 tonearest binary128 0x9.79475p+4 : 0x2.49a6f3fb003462a1f15135cec05cp-16 : inexact-ok
+= j1 towardzero binary128 0x9.79475p+4 : 0x2.49a6f3fb003462a1f15135cec05ap-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 upward binary128 0x9.79475p+4 : 0x2.49a6f3fb003462a1f15135cec05cp-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 downward ibm128 0x9.79475p+4 : 0x2.49a6f3fb003462a1f15135cecp-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 tonearest ibm128 0x9.79475p+4 : 0x2.49a6f3fb003462a1f15135cecp-16 : inexact-ok
+= j1 towardzero ibm128 0x9.79475p+4 : 0x2.49a6f3fb003462a1f15135cecp-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 upward ibm128 0x9.79475p+4 : 0x2.49a6f3fb003462a1f15135cec1p-16 : xfail:binary64 xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+j1 0x1.a1d20ap+6 xfail-rounding:binary128 xfail-rounding:intel96 xfail-rounding:ibm128-libgcc
+= j1 downward binary32 0x6.874828p+4 : -0x3.d6f0b8p-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 tonearest binary32 0x6.874828p+4 : -0x3.d6f0b4p-16 : inexact-ok
+= j1 towardzero binary32 0x6.874828p+4 : -0x3.d6f0b4p-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 upward binary32 0x6.874828p+4 : -0x3.d6f0b4p-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 downward binary64 0x6.874828p+4 : -0x3.d6f0b408112dp-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 tonearest binary64 0x6.874828p+4 : -0x3.d6f0b408112dp-16 : inexact-ok
+= j1 towardzero binary64 0x6.874828p+4 : -0x3.d6f0b408112cep-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 upward binary64 0x6.874828p+4 : -0x3.d6f0b408112cep-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 downward intel96 0x6.874828p+4 : -0x3.d6f0b408112cf3dp-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 tonearest intel96 0x6.874828p+4 : -0x3.d6f0b408112cf3ccp-16 : inexact-ok
+= j1 towardzero intel96 0x6.874828p+4 : -0x3.d6f0b408112cf3ccp-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 upward intel96 0x6.874828p+4 : -0x3.d6f0b408112cf3ccp-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 downward m68k96 0x6.874828p+4 : -0x3.d6f0b408112cf3dp-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 tonearest m68k96 0x6.874828p+4 : -0x3.d6f0b408112cf3ccp-16 : inexact-ok
+= j1 towardzero m68k96 0x6.874828p+4 : -0x3.d6f0b408112cf3ccp-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 upward m68k96 0x6.874828p+4 : -0x3.d6f0b408112cf3ccp-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 downward binary128 0x6.874828p+4 : -0x3.d6f0b408112cf3cdb53ca3ca7088p-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 tonearest binary128 0x6.874828p+4 : -0x3.d6f0b408112cf3cdb53ca3ca7086p-16 : inexact-ok
+= j1 towardzero binary128 0x6.874828p+4 : -0x3.d6f0b408112cf3cdb53ca3ca7086p-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 upward binary128 0x6.874828p+4 : -0x3.d6f0b408112cf3cdb53ca3ca7086p-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 downward ibm128 0x6.874828p+4 : -0x3.d6f0b408112cf3cdb53ca3ca71p-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 tonearest ibm128 0x6.874828p+4 : -0x3.d6f0b408112cf3cdb53ca3ca71p-16 : inexact-ok
+= j1 towardzero ibm128 0x6.874828p+4 : -0x3.d6f0b408112cf3cdb53ca3ca7p-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= j1 upward ibm128 0x6.874828p+4 : -0x3.d6f0b408112cf3cdb53ca3ca7p-16 : xfail:binary128 xfail:intel96 xfail:ibm128-libgcc inexact-ok
j1 min
= j1 downward binary32 0x4p-128 : 0x1.fffff8p-128 : inexact-ok underflow errno-erange-ok
= j1 tonearest binary32 0x4p-128 : 0x2p-128 : inexact-ok underflow errno-erange-ok
diff --git a/math/auto-libm-test-out-y0 b/math/auto-libm-test-out-y0
index 8ebb585..f9742b0 100644
--- a/math/auto-libm-test-out-y0
+++ b/math/auto-libm-test-out-y0
@@ -820,6 +820,56 @@ y0 0xd.3432bp-4
= y0 tonearest ibm128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b44p-8 : inexact-ok
= y0 towardzero ibm128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b44p-8 : inexact-ok
= y0 upward ibm128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b44p-8 : inexact-ok
+y0 0x1.33eaacp+5 xfail:binary64 xfail:intel96 xfail-rounding:ibm128-libgcc
+= y0 downward binary32 0x2.67d558p+4 : 0xf.6b0ep-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 tonearest binary32 0x2.67d558p+4 : 0xf.6b0ep-16 : xfail:binary64 xfail:intel96 inexact-ok
+= y0 towardzero binary32 0x2.67d558p+4 : 0xf.6b0ep-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 upward binary32 0x2.67d558p+4 : 0xf.6b0e1p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 downward binary64 0x2.67d558p+4 : 0xf.6b0e005e95ad8p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 tonearest binary64 0x2.67d558p+4 : 0xf.6b0e005e95ad8p-16 : xfail:binary64 xfail:intel96 inexact-ok
+= y0 towardzero binary64 0x2.67d558p+4 : 0xf.6b0e005e95ad8p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 upward binary64 0x2.67d558p+4 : 0xf.6b0e005e95aep-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 downward intel96 0x2.67d558p+4 : 0xf.6b0e005e95ad82ap-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 tonearest intel96 0x2.67d558p+4 : 0xf.6b0e005e95ad82ap-16 : xfail:binary64 xfail:intel96 inexact-ok
+= y0 towardzero intel96 0x2.67d558p+4 : 0xf.6b0e005e95ad82ap-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 upward intel96 0x2.67d558p+4 : 0xf.6b0e005e95ad82bp-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 downward m68k96 0x2.67d558p+4 : 0xf.6b0e005e95ad82ap-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 tonearest m68k96 0x2.67d558p+4 : 0xf.6b0e005e95ad82ap-16 : xfail:binary64 xfail:intel96 inexact-ok
+= y0 towardzero m68k96 0x2.67d558p+4 : 0xf.6b0e005e95ad82ap-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 upward m68k96 0x2.67d558p+4 : 0xf.6b0e005e95ad82bp-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 downward binary128 0x2.67d558p+4 : 0xf.6b0e005e95ad82a5093316a6b86p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 tonearest binary128 0x2.67d558p+4 : 0xf.6b0e005e95ad82a5093316a6b86p-16 : xfail:binary64 xfail:intel96 inexact-ok
+= y0 towardzero binary128 0x2.67d558p+4 : 0xf.6b0e005e95ad82a5093316a6b86p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 upward binary128 0x2.67d558p+4 : 0xf.6b0e005e95ad82a5093316a6b868p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 downward ibm128 0x2.67d558p+4 : 0xf.6b0e005e95ad82a5093316a6b8p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 tonearest ibm128 0x2.67d558p+4 : 0xf.6b0e005e95ad82a5093316a6b8p-16 : xfail:binary64 xfail:intel96 inexact-ok
+= y0 towardzero ibm128 0x2.67d558p+4 : 0xf.6b0e005e95ad82a5093316a6b8p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y0 upward ibm128 0x2.67d558p+4 : 0xf.6b0e005e95ad82a5093316a6bcp-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+y0 0x1.a681cep-1 xfail-rounding:ibm128-libgcc
+= y0 downward binary32 0xd.340e7p-4 : -0xf.ffff8p-8 : xfail:ibm128-libgcc inexact-ok
+= y0 tonearest binary32 0xd.340e7p-4 : -0xf.ffff8p-8 : inexact-ok
+= y0 towardzero binary32 0xd.340e7p-4 : -0xf.ffff7p-8 : xfail:ibm128-libgcc inexact-ok
+= y0 upward binary32 0xd.340e7p-4 : -0xf.ffff7p-8 : xfail:ibm128-libgcc inexact-ok
+= y0 downward binary64 0xd.340e7p-4 : -0xf.ffff7f7e5aba8p-8 : xfail:ibm128-libgcc inexact-ok
+= y0 tonearest binary64 0xd.340e7p-4 : -0xf.ffff7f7e5aba8p-8 : inexact-ok
+= y0 towardzero binary64 0xd.340e7p-4 : -0xf.ffff7f7e5abap-8 : xfail:ibm128-libgcc inexact-ok
+= y0 upward binary64 0xd.340e7p-4 : -0xf.ffff7f7e5abap-8 : xfail:ibm128-libgcc inexact-ok
+= y0 downward intel96 0xd.340e7p-4 : -0xf.ffff7f7e5aba736p-8 : xfail:ibm128-libgcc inexact-ok
+= y0 tonearest intel96 0xd.340e7p-4 : -0xf.ffff7f7e5aba736p-8 : inexact-ok
+= y0 towardzero intel96 0xd.340e7p-4 : -0xf.ffff7f7e5aba735p-8 : xfail:ibm128-libgcc inexact-ok
+= y0 upward intel96 0xd.340e7p-4 : -0xf.ffff7f7e5aba735p-8 : xfail:ibm128-libgcc inexact-ok
+= y0 downward m68k96 0xd.340e7p-4 : -0xf.ffff7f7e5aba736p-8 : xfail:ibm128-libgcc inexact-ok
+= y0 tonearest m68k96 0xd.340e7p-4 : -0xf.ffff7f7e5aba736p-8 : inexact-ok
+= y0 towardzero m68k96 0xd.340e7p-4 : -0xf.ffff7f7e5aba735p-8 : xfail:ibm128-libgcc inexact-ok
+= y0 upward m68k96 0xd.340e7p-4 : -0xf.ffff7f7e5aba735p-8 : xfail:ibm128-libgcc inexact-ok
+= y0 downward binary128 0xd.340e7p-4 : -0xf.ffff7f7e5aba735ccb0b13b25de8p-8 : xfail:ibm128-libgcc inexact-ok
+= y0 tonearest binary128 0xd.340e7p-4 : -0xf.ffff7f7e5aba735ccb0b13b25dep-8 : inexact-ok
+= y0 towardzero binary128 0xd.340e7p-4 : -0xf.ffff7f7e5aba735ccb0b13b25dep-8 : xfail:ibm128-libgcc inexact-ok
+= y0 upward binary128 0xd.340e7p-4 : -0xf.ffff7f7e5aba735ccb0b13b25dep-8 : xfail:ibm128-libgcc inexact-ok
+= y0 downward ibm128 0xd.340e7p-4 : -0xf.ffff7f7e5aba735ccb0b13b26p-8 : xfail:ibm128-libgcc inexact-ok
+= y0 tonearest ibm128 0xd.340e7p-4 : -0xf.ffff7f7e5aba735ccb0b13b25cp-8 : inexact-ok
+= y0 towardzero ibm128 0xd.340e7p-4 : -0xf.ffff7f7e5aba735ccb0b13b25cp-8 : xfail:ibm128-libgcc inexact-ok
+= y0 upward ibm128 0xd.340e7p-4 : -0xf.ffff7f7e5aba735ccb0b13b25cp-8 : xfail:ibm128-libgcc inexact-ok
y0 min
= y0 downward binary32 0x4p-128 : -0x3.7ac89cp+4 : inexact-ok
= y0 tonearest binary32 0x4p-128 : -0x3.7ac89cp+4 : inexact-ok
diff --git a/math/auto-libm-test-out-y1 b/math/auto-libm-test-out-y1
index af68e6c..ab920d1 100644
--- a/math/auto-libm-test-out-y1
+++ b/math/auto-libm-test-out-y1
@@ -795,6 +795,81 @@ y1 0x1p-10000
= y1 tonearest binary128 0x1p-10000 : -0xa.2f9836e4e441529fc2757d1f535p+9996 : inexact-ok
= y1 towardzero binary128 0x1p-10000 : -0xa.2f9836e4e441529fc2757d1f5348p+9996 : inexact-ok
= y1 upward binary128 0x1p-10000 : -0xa.2f9836e4e441529fc2757d1f5348p+9996 : inexact-ok
+y1 0x1.065194p+7 xfail-rounding:binary64 xfail-rounding:intel96 xfail-rounding:ibm128-libgcc
+= y1 downward binary32 0x8.328cap+4 : -0x3.2fe874p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 tonearest binary32 0x8.328cap+4 : -0x3.2fe87p-16 : inexact-ok
+= y1 towardzero binary32 0x8.328cap+4 : -0x3.2fe87p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 upward binary32 0x8.328cap+4 : -0x3.2fe87p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 downward binary64 0x8.328cap+4 : -0x3.2fe87001a1df4p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 tonearest binary64 0x8.328cap+4 : -0x3.2fe87001a1df4p-16 : inexact-ok
+= y1 towardzero binary64 0x8.328cap+4 : -0x3.2fe87001a1df2p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 upward binary64 0x8.328cap+4 : -0x3.2fe87001a1df2p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 downward intel96 0x8.328cap+4 : -0x3.2fe87001a1df3754p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 tonearest intel96 0x8.328cap+4 : -0x3.2fe87001a1df375p-16 : inexact-ok
+= y1 towardzero intel96 0x8.328cap+4 : -0x3.2fe87001a1df375p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 upward intel96 0x8.328cap+4 : -0x3.2fe87001a1df375p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 downward m68k96 0x8.328cap+4 : -0x3.2fe87001a1df3754p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 tonearest m68k96 0x8.328cap+4 : -0x3.2fe87001a1df375p-16 : inexact-ok
+= y1 towardzero m68k96 0x8.328cap+4 : -0x3.2fe87001a1df375p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 upward m68k96 0x8.328cap+4 : -0x3.2fe87001a1df375p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 downward binary128 0x8.328cap+4 : -0x3.2fe87001a1df375068d0356aecb2p-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 tonearest binary128 0x8.328cap+4 : -0x3.2fe87001a1df375068d0356aecb2p-16 : inexact-ok
+= y1 towardzero binary128 0x8.328cap+4 : -0x3.2fe87001a1df375068d0356aecbp-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 upward binary128 0x8.328cap+4 : -0x3.2fe87001a1df375068d0356aecbp-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 downward ibm128 0x8.328cap+4 : -0x3.2fe87001a1df375068d0356aedp-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 tonearest ibm128 0x8.328cap+4 : -0x3.2fe87001a1df375068d0356aedp-16 : inexact-ok
+= y1 towardzero ibm128 0x8.328cap+4 : -0x3.2fe87001a1df375068d0356aecp-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+= y1 upward ibm128 0x8.328cap+4 : -0x3.2fe87001a1df375068d0356aecp-16 : xfail:binary64 xfail:intel96 xfail:ibm128-libgcc inexact-ok
+y1 0x1.c1badep+0 xfail-rounding:ibm128-libgcc
+= y1 downward binary32 0x1.c1badep+0 : -0x3.ff6378p-4 : xfail:ibm128-libgcc inexact-ok
+= y1 tonearest binary32 0x1.c1badep+0 : -0x3.ff6374p-4 : inexact-ok
+= y1 towardzero binary32 0x1.c1badep+0 : -0x3.ff6374p-4 : xfail:ibm128-libgcc inexact-ok
+= y1 upward binary32 0x1.c1badep+0 : -0x3.ff6374p-4 : xfail:ibm128-libgcc inexact-ok
+= y1 downward binary64 0x1.c1badep+0 : -0x3.ff6375c9f4404p-4 : xfail:ibm128-libgcc inexact-ok
+= y1 tonearest binary64 0x1.c1badep+0 : -0x3.ff6375c9f4402p-4 : inexact-ok
+= y1 towardzero binary64 0x1.c1badep+0 : -0x3.ff6375c9f4402p-4 : xfail:ibm128-libgcc inexact-ok
+= y1 upward binary64 0x1.c1badep+0 : -0x3.ff6375c9f4402p-4 : xfail:ibm128-libgcc inexact-ok
+= y1 downward intel96 0x1.c1badep+0 : -0x3.ff6375c9f440230cp-4 : xfail:ibm128-libgcc inexact-ok
+= y1 tonearest intel96 0x1.c1badep+0 : -0x3.ff6375c9f440230cp-4 : inexact-ok
+= y1 towardzero intel96 0x1.c1badep+0 : -0x3.ff6375c9f4402308p-4 : xfail:ibm128-libgcc inexact-ok
+= y1 upward intel96 0x1.c1badep+0 : -0x3.ff6375c9f4402308p-4 : xfail:ibm128-libgcc inexact-ok
+= y1 downward m68k96 0x1.c1badep+0 : -0x3.ff6375c9f440230cp-4 : xfail:ibm128-libgcc inexact-ok
+= y1 tonearest m68k96 0x1.c1badep+0 : -0x3.ff6375c9f440230cp-4 : inexact-ok
+= y1 towardzero m68k96 0x1.c1badep+0 : -0x3.ff6375c9f4402308p-4 : xfail:ibm128-libgcc inexact-ok
+= y1 upward m68k96 0x1.c1badep+0 : -0x3.ff6375c9f4402308p-4 : xfail:ibm128-libgcc inexact-ok
+= y1 downward binary128 0x1.c1badep+0 : -0x3.ff6375c9f440230a8962842c1ebp-4 : xfail:ibm128-libgcc inexact-ok
+= y1 tonearest binary128 0x1.c1badep+0 : -0x3.ff6375c9f440230a8962842c1ebp-4 : inexact-ok
+= y1 towardzero binary128 0x1.c1badep+0 : -0x3.ff6375c9f440230a8962842c1eaep-4 : xfail:ibm128-libgcc inexact-ok
+= y1 upward binary128 0x1.c1badep+0 : -0x3.ff6375c9f440230a8962842c1eaep-4 : xfail:ibm128-libgcc inexact-ok
+= y1 downward ibm128 0x1.c1badep+0 : -0x3.ff6375c9f440230a8962842c1fp-4 : xfail:ibm128-libgcc inexact-ok
+= y1 tonearest ibm128 0x1.c1badep+0 : -0x3.ff6375c9f440230a8962842c1fp-4 : inexact-ok
+= y1 towardzero ibm128 0x1.c1badep+0 : -0x3.ff6375c9f440230a8962842c1ep-4 : xfail:ibm128-libgcc inexact-ok
+= y1 upward ibm128 0x1.c1badep+0 : -0x3.ff6375c9f440230a8962842c1ep-4 : xfail:ibm128-libgcc inexact-ok
+y1 0x1.c1bc2ep+0
+= y1 downward binary32 0x1.c1bc2ep+0 : -0x3.ff56acp-4 : inexact-ok
+= y1 tonearest binary32 0x1.c1bc2ep+0 : -0x3.ff56a8p-4 : inexact-ok
+= y1 towardzero binary32 0x1.c1bc2ep+0 : -0x3.ff56a8p-4 : inexact-ok
+= y1 upward binary32 0x1.c1bc2ep+0 : -0x3.ff56a8p-4 : inexact-ok
+= y1 downward binary64 0x1.c1bc2ep+0 : -0x3.ff56a991ca78ap-4 : inexact-ok
+= y1 tonearest binary64 0x1.c1bc2ep+0 : -0x3.ff56a991ca788p-4 : inexact-ok
+= y1 towardzero binary64 0x1.c1bc2ep+0 : -0x3.ff56a991ca788p-4 : inexact-ok
+= y1 upward binary64 0x1.c1bc2ep+0 : -0x3.ff56a991ca788p-4 : inexact-ok
+= y1 downward intel96 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd8p-4 : inexact-ok
+= y1 tonearest intel96 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd4p-4 : inexact-ok
+= y1 towardzero intel96 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd4p-4 : inexact-ok
+= y1 upward intel96 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd4p-4 : inexact-ok
+= y1 downward m68k96 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd8p-4 : inexact-ok
+= y1 tonearest m68k96 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd4p-4 : inexact-ok
+= y1 towardzero m68k96 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd4p-4 : inexact-ok
+= y1 upward m68k96 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd4p-4 : inexact-ok
+= y1 downward binary128 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd5084138201442p-4 : inexact-ok
+= y1 tonearest binary128 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd5084138201442p-4 : inexact-ok
+= y1 towardzero binary128 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd508413820144p-4 : inexact-ok
+= y1 upward binary128 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd508413820144p-4 : inexact-ok
+= y1 downward ibm128 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd50841382015p-4 : inexact-ok
+= y1 tonearest ibm128 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd50841382014p-4 : inexact-ok
+= y1 towardzero ibm128 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd50841382014p-4 : inexact-ok
+= y1 upward ibm128 0x1.c1bc2ep+0 : -0x3.ff56a991ca788cd50841382014p-4 : inexact-ok
y1 min
= y1 downward binary32 0x4p-128 : -0x2.8be61p+124 : inexact-ok
= y1 tonearest binary32 0x4p-128 : -0x2.8be60cp+124 : inexact-ok