diff options
| author | Joseph Myers <joseph@codesourcery.com> | 2013-12-19 13:36:10 +0000 |
|---|---|---|
| committer | Joseph Myers <joseph@codesourcery.com> | 2013-12-19 13:36:10 +0000 |
| commit | f88acd39da2a509081e541b84ecbf204ef20f9e8 (patch) | |
| tree | 383c0bcce4b3e74c9150d01550e7c412e47981bd | |
| parent | c688b4196014e0162a1ff11120f6c9516be0c6cb (diff) | |
| download | glibc-f88acd39da2a509081e541b84ecbf204ef20f9e8.tar.xz glibc-f88acd39da2a509081e541b84ecbf204ef20f9e8.zip | |
Fix x86/x86_64 expm1 inaccuracy near 0 in directed rounding modes (bug 16293).
Bug 16293 is inaccuracy of x86/x86_64 versions of expm1, near 0 in
directed rounding modes, that arises from frndint rounding the
exponent to 1 or -1 instead of 0, resulting in large cancellation
error. This inaccuracy in turn affects other functions such as sinh
that use expm1. This patch fixes the problem by setting
round-to-nearest mode temporarily around the affected calls to
frndint. I don't think this is needed for other uses of frndint, such
as in exp itself, as only for expm1 is the cancellation error
significant.
Tested x86_64 and x86 and ulps updated accordingly.
* sysdeps/i386/fpu/e_expl.S (IEEE754_EXPL) [USE_AS_EXPM1L]: Set
round-to-nearest mode when using frndint.
* sysdeps/i386/fpu/s_expm1.S (__expm1): Likewise.
* sysdeps/i386/fpu/s_expm1f.S (__expm1f): Likewise.
* sysdeps/x86_64/fpu/e_expl.S (IEEE754_EXPL) [USE_AS_EXPM1L]:
Likewise.
* math/auto-libm-test-in: Add more tests of expm1. Do not expect
sinh test to fail.
* math/auto-libm-test-out: Regenerated.
* math/libm-test.inc (TEST_COND_x86_64): Remove macro.
(TEST_COND_x86): Likewise.
(expm1_tonearest_test_data): New array.
(expm1_test_tonearest): New function.
(expm1_towardzero_test_data): New array.
(expm1_test_towardzero): New function.
(expm1_downward_test_data): New array.
(expm1_test_downward): New function.
(expm1_upward_test_data): New array.
(expm1_test_upward): New function.
(main): Run the new test functions.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
| -rw-r--r-- | ChangeLog | 24 | ||||
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | math/auto-libm-test-in | 19 | ||||
| -rw-r--r-- | math/auto-libm-test-out | 450 | ||||
| -rw-r--r-- | math/libm-test.inc | 72 | ||||
| -rw-r--r-- | sysdeps/i386/fpu/e_expl.S | 15 | ||||
| -rw-r--r-- | sysdeps/i386/fpu/libm-test-ulps | 375 | ||||
| -rw-r--r-- | sysdeps/i386/fpu/s_expm1.S | 11 | ||||
| -rw-r--r-- | sysdeps/i386/fpu/s_expm1f.S | 11 | ||||
| -rw-r--r-- | sysdeps/x86_64/fpu/e_expl.S | 11 | ||||
| -rw-r--r-- | sysdeps/x86_64/fpu/libm-test-ulps | 319 |
11 files changed, 1269 insertions, 40 deletions
@@ -1,5 +1,29 @@ 2013-12-19 Joseph Myers <joseph@codesourcery.com> + [BZ #16293] + * sysdeps/i386/fpu/e_expl.S (IEEE754_EXPL) [USE_AS_EXPM1L]: Set + round-to-nearest mode when using frndint. + * sysdeps/i386/fpu/s_expm1.S (__expm1): Likewise. + * sysdeps/i386/fpu/s_expm1f.S (__expm1f): Likewise. + * sysdeps/x86_64/fpu/e_expl.S (IEEE754_EXPL) [USE_AS_EXPM1L]: + Likewise. + * math/auto-libm-test-in: Add more tests of expm1. Do not expect + sinh test to fail. + * math/auto-libm-test-out: Regenerated. + * math/libm-test.inc (TEST_COND_x86_64): Remove macro. + (TEST_COND_x86): Likewise. + (expm1_tonearest_test_data): New array. + (expm1_test_tonearest): New function. + (expm1_towardzero_test_data): New array. + (expm1_test_towardzero): New function. + (expm1_downward_test_data): New array. + (expm1_test_downward): New function. + (expm1_upward_test_data): New array. + (expm1_test_upward): New function. + (main): Run the new test functions. + * sysdeps/i386/fpu/libm-test-ulps: Update. + * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. + * include/features.h: Update comment documenting feature test macros. Mention _DEFAULT_SOURCE in comment. [_GNU_SOURCE] (_DEFAULT_SOURCE): Undefine and redefine. @@ -22,7 +22,7 @@ Version 2.19 15966, 15985, 15988, 15997, 16032, 16034, 16036, 16037, 16038, 16041, 16055, 16071, 16072, 16074, 16077, 16078, 16103, 16112, 16143, 16144, 16146, 16150, 16151, 16153, 16167, 16172, 16195, 16214, 16245, 16271, - 16274, 16283, 16289, 16314, 16316, 16330, 16338. + 16274, 16283, 16289, 16293, 16314, 16316, 16330, 16338. * The public headers no longer use __unused nor __block. This change is to support compiling programs that are derived from BSD sources and use diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in index 50e0e6b628..28e9d455b6 100644 --- a/math/auto-libm-test-in +++ b/math/auto-libm-test-in @@ -281,6 +281,22 @@ expm1 -100000.0 expm1 100000.0 expm1 max expm1 -max +expm1 0x1p-2 +expm1 -0x1p-2 +expm1 0x1p-10 +expm1 -0x1p-10 +expm1 0x1p-20 +expm1 -0x1p-20 +expm1 0x1p-29 +expm1 -0x1p-29 +expm1 0x1p-32 +expm1 -0x1p-32 +expm1 0x1p-50 +expm1 -0x1p-50 +expm1 0x1p-64 +expm1 -0x1p-64 +expm1 0x1p-100 +expm1 -0x1p-100 hypot 0 0 hypot 0 -0 @@ -835,8 +851,7 @@ sin 10 sinh 0 sinh -0 sinh 0.75 -# Bug 16293: expm1 inaccurate in directed rounding modes. -sinh 0x8p-32 xfail:x86_64:ldbl-96-intel xfail:x86 +sinh 0x8p-32 sinh 22 sinh 23 sinh 24 diff --git a/math/auto-libm-test-out b/math/auto-libm-test-out index e80e363380..06a7591b90 100644 --- a/math/auto-libm-test-out +++ b/math/auto-libm-test-out @@ -10893,6 +10893,406 @@ expm1 -max = expm1 tonearest ldbl-128ibm -0xf.ffffffffffffbffffffffffffcp+1020L : -0x1p+0L : inexact-ok = expm1 towardzero ldbl-128ibm -0xf.ffffffffffffbffffffffffffcp+1020L : -0xf.fffffffffffffffffffffffffcp-4L : inexact-ok = expm1 upward ldbl-128ibm -0xf.ffffffffffffbffffffffffffcp+1020L : -0xf.fffffffffffffffffffffffffcp-4L : inexact-ok +expm1 0x1p-2 += expm1 downward flt-32 0x4p-4f : 0x4.8b5e38p-4f : inexact-ok += expm1 tonearest flt-32 0x4p-4f : 0x4.8b5e4p-4f : inexact-ok += expm1 towardzero flt-32 0x4p-4f : 0x4.8b5e38p-4f : inexact-ok += expm1 upward flt-32 0x4p-4f : 0x4.8b5e4p-4f : inexact-ok += expm1 downward dbl-64 0x4p-4 : 0x4.8b5e3c3e81864p-4 : inexact-ok += expm1 tonearest dbl-64 0x4p-4 : 0x4.8b5e3c3e81868p-4 : inexact-ok += expm1 towardzero dbl-64 0x4p-4 : 0x4.8b5e3c3e81864p-4 : inexact-ok += expm1 upward dbl-64 0x4p-4 : 0x4.8b5e3c3e81868p-4 : inexact-ok += expm1 downward ldbl-96-intel 0x4p-4L : 0x4.8b5e3c3e8186676p-4L : inexact-ok += expm1 tonearest ldbl-96-intel 0x4p-4L : 0x4.8b5e3c3e81866768p-4L : inexact-ok += expm1 towardzero ldbl-96-intel 0x4p-4L : 0x4.8b5e3c3e8186676p-4L : inexact-ok += expm1 upward ldbl-96-intel 0x4p-4L : 0x4.8b5e3c3e81866768p-4L : inexact-ok += expm1 downward ldbl-96-m68k 0x4p-4L : 0x4.8b5e3c3e8186676p-4L : inexact-ok += expm1 tonearest ldbl-96-m68k 0x4p-4L : 0x4.8b5e3c3e81866768p-4L : inexact-ok += expm1 towardzero ldbl-96-m68k 0x4p-4L : 0x4.8b5e3c3e8186676p-4L : inexact-ok += expm1 upward ldbl-96-m68k 0x4p-4L : 0x4.8b5e3c3e81866768p-4L : inexact-ok += expm1 downward ldbl-128 0x4p-4L : 0x4.8b5e3c3e81866767bc3b69baabe4p-4L : inexact-ok += expm1 tonearest ldbl-128 0x4p-4L : 0x4.8b5e3c3e81866767bc3b69baabe4p-4L : inexact-ok += expm1 towardzero ldbl-128 0x4p-4L : 0x4.8b5e3c3e81866767bc3b69baabe4p-4L : inexact-ok += expm1 upward ldbl-128 0x4p-4L : 0x4.8b5e3c3e81866767bc3b69baabe8p-4L : inexact-ok += expm1 downward ldbl-128ibm 0x4p-4L : 0x4.8b5e3c3e81866767bc3b69baaap-4L : inexact-ok += expm1 tonearest ldbl-128ibm 0x4p-4L : 0x4.8b5e3c3e81866767bc3b69baacp-4L : inexact-ok += expm1 towardzero ldbl-128ibm 0x4p-4L : 0x4.8b5e3c3e81866767bc3b69baaap-4L : inexact-ok += expm1 upward ldbl-128ibm 0x4p-4L : 0x4.8b5e3c3e81866767bc3b69baacp-4L : inexact-ok +expm1 -0x1p-2 += expm1 downward flt-32 -0x4p-4f : -0x3.8a0834p-4f : inexact-ok += expm1 tonearest flt-32 -0x4p-4f : -0x3.8a083p-4f : inexact-ok += expm1 towardzero flt-32 -0x4p-4f : -0x3.8a083p-4f : inexact-ok += expm1 upward flt-32 -0x4p-4f : -0x3.8a083p-4f : inexact-ok += expm1 downward dbl-64 -0x4p-4 : -0x3.8a0830a9befaap-4 : inexact-ok += expm1 tonearest dbl-64 -0x4p-4 : -0x3.8a0830a9befa8p-4 : inexact-ok += expm1 towardzero dbl-64 -0x4p-4 : -0x3.8a0830a9befa8p-4 : inexact-ok += expm1 upward dbl-64 -0x4p-4 : -0x3.8a0830a9befa8p-4 : inexact-ok += expm1 downward ldbl-96-intel -0x4p-4L : -0x3.8a0830a9befa8bccp-4L : inexact-ok += expm1 tonearest ldbl-96-intel -0x4p-4L : -0x3.8a0830a9befa8bccp-4L : inexact-ok += expm1 towardzero ldbl-96-intel -0x4p-4L : -0x3.8a0830a9befa8bc8p-4L : inexact-ok += expm1 upward ldbl-96-intel -0x4p-4L : -0x3.8a0830a9befa8bc8p-4L : inexact-ok += expm1 downward ldbl-96-m68k -0x4p-4L : -0x3.8a0830a9befa8bccp-4L : inexact-ok += expm1 tonearest ldbl-96-m68k -0x4p-4L : -0x3.8a0830a9befa8bccp-4L : inexact-ok += expm1 towardzero ldbl-96-m68k -0x4p-4L : -0x3.8a0830a9befa8bc8p-4L : inexact-ok += expm1 upward ldbl-96-m68k -0x4p-4L : -0x3.8a0830a9befa8bc8p-4L : inexact-ok += expm1 downward ldbl-128 -0x4p-4L : -0x3.8a0830a9befa8bcbea343629c972p-4L : inexact-ok += expm1 tonearest ldbl-128 -0x4p-4L : -0x3.8a0830a9befa8bcbea343629c97p-4L : inexact-ok += expm1 towardzero ldbl-128 -0x4p-4L : -0x3.8a0830a9befa8bcbea343629c97p-4L : inexact-ok += expm1 upward ldbl-128 -0x4p-4L : -0x3.8a0830a9befa8bcbea343629c97p-4L : inexact-ok += expm1 downward ldbl-128ibm -0x4p-4L : -0x3.8a0830a9befa8bcbea343629cap-4L : inexact-ok += expm1 tonearest ldbl-128ibm -0x4p-4L : -0x3.8a0830a9befa8bcbea343629c9p-4L : inexact-ok += expm1 towardzero ldbl-128ibm -0x4p-4L : -0x3.8a0830a9befa8bcbea343629c9p-4L : inexact-ok += expm1 upward ldbl-128ibm -0x4p-4L : -0x3.8a0830a9befa8bcbea343629c9p-4L : inexact-ok +expm1 0x1p-10 += expm1 downward flt-32 0x4p-12f : 0x4.008008p-12f : inexact-ok += expm1 tonearest flt-32 0x4p-12f : 0x4.008008p-12f : inexact-ok += expm1 towardzero flt-32 0x4p-12f : 0x4.008008p-12f : inexact-ok += expm1 upward flt-32 0x4p-12f : 0x4.00801p-12f : inexact-ok += expm1 downward dbl-64 0x4p-12 : 0x4.00800aab555dcp-12 : inexact-ok += expm1 tonearest dbl-64 0x4p-12 : 0x4.00800aab555dcp-12 : inexact-ok += expm1 towardzero dbl-64 0x4p-12 : 0x4.00800aab555dcp-12 : inexact-ok += expm1 upward dbl-64 0x4p-12 : 0x4.00800aab555ep-12 : inexact-ok += expm1 downward ldbl-96-intel 0x4p-12L : 0x4.00800aab555dde38p-12L : inexact-ok += expm1 tonearest ldbl-96-intel 0x4p-12L : 0x4.00800aab555dde38p-12L : inexact-ok += expm1 towardzero ldbl-96-intel 0x4p-12L : 0x4.00800aab555dde38p-12L : inexact-ok += expm1 upward ldbl-96-intel 0x4p-12L : 0x4.00800aab555dde4p-12L : inexact-ok += expm1 downward ldbl-96-m68k 0x4p-12L : 0x4.00800aab555dde38p-12L : inexact-ok += expm1 tonearest ldbl-96-m68k 0x4p-12L : 0x4.00800aab555dde38p-12L : inexact-ok += expm1 towardzero ldbl-96-m68k 0x4p-12L : 0x4.00800aab555dde38p-12L : inexact-ok += expm1 upward ldbl-96-m68k 0x4p-12L : 0x4.00800aab555dde4p-12L : inexact-ok += expm1 downward ldbl-128 0x4p-12L : 0x4.00800aab555dde38e6ce86e92778p-12L : inexact-ok += expm1 tonearest ldbl-128 0x4p-12L : 0x4.00800aab555dde38e6ce86e9277cp-12L : inexact-ok += expm1 towardzero ldbl-128 0x4p-12L : 0x4.00800aab555dde38e6ce86e92778p-12L : inexact-ok += expm1 upward ldbl-128 0x4p-12L : 0x4.00800aab555dde38e6ce86e9277cp-12L : inexact-ok += expm1 downward ldbl-128ibm 0x4p-12L : 0x4.00800aab555dde38e6ce86e926p-12L : inexact-ok += expm1 tonearest ldbl-128ibm 0x4p-12L : 0x4.00800aab555dde38e6ce86e928p-12L : inexact-ok += expm1 towardzero ldbl-128ibm 0x4p-12L : 0x4.00800aab555dde38e6ce86e926p-12L : inexact-ok += expm1 upward ldbl-128ibm 0x4p-12L : 0x4.00800aab555dde38e6ce86e928p-12L : inexact-ok +expm1 -0x1p-10 += expm1 downward flt-32 -0x4p-12f : -0x3.ff800cp-12f : inexact-ok += expm1 tonearest flt-32 -0x4p-12f : -0x3.ff800cp-12f : inexact-ok += expm1 towardzero flt-32 -0x4p-12f : -0x3.ff8008p-12f : inexact-ok += expm1 upward flt-32 -0x4p-12f : -0x3.ff8008p-12f : inexact-ok += expm1 downward dbl-64 -0x4p-12 : -0x3.ff800aaa0008ap-12 : inexact-ok += expm1 tonearest dbl-64 -0x4p-12 : -0x3.ff800aaa00088p-12 : inexact-ok += expm1 towardzero dbl-64 -0x4p-12 : -0x3.ff800aaa00088p-12 : inexact-ok += expm1 upward dbl-64 -0x4p-12 : -0x3.ff800aaa00088p-12 : inexact-ok += expm1 downward ldbl-96-intel -0x4p-12L : -0x3.ff800aaa0008883p-12L : inexact-ok += expm1 tonearest ldbl-96-intel -0x4p-12L : -0x3.ff800aaa0008882cp-12L : inexact-ok += expm1 towardzero ldbl-96-intel -0x4p-12L : -0x3.ff800aaa0008882cp-12L : inexact-ok += expm1 upward ldbl-96-intel -0x4p-12L : -0x3.ff800aaa0008882cp-12L : inexact-ok += expm1 downward ldbl-96-m68k -0x4p-12L : -0x3.ff800aaa0008883p-12L : inexact-ok += expm1 tonearest ldbl-96-m68k -0x4p-12L : -0x3.ff800aaa0008882cp-12L : inexact-ok += expm1 towardzero ldbl-96-m68k -0x4p-12L : -0x3.ff800aaa0008882cp-12L : inexact-ok += expm1 upward ldbl-96-m68k -0x4p-12L : -0x3.ff800aaa0008882cp-12L : inexact-ok += expm1 downward ldbl-128 -0x4p-12L : -0x3.ff800aaa0008882d861847853132p-12L : inexact-ok += expm1 tonearest ldbl-128 -0x4p-12L : -0x3.ff800aaa0008882d861847853132p-12L : inexact-ok += expm1 towardzero ldbl-128 -0x4p-12L : -0x3.ff800aaa0008882d86184785313p-12L : inexact-ok += expm1 upward ldbl-128 -0x4p-12L : -0x3.ff800aaa0008882d86184785313p-12L : inexact-ok += expm1 downward ldbl-128ibm -0x4p-12L : -0x3.ff800aaa0008882d8618478532p-12L : inexact-ok += expm1 tonearest ldbl-128ibm -0x4p-12L : -0x3.ff800aaa0008882d8618478531p-12L : inexact-ok += expm1 towardzero ldbl-128ibm -0x4p-12L : -0x3.ff800aaa0008882d8618478531p-12L : inexact-ok += expm1 upward ldbl-128ibm -0x4p-12L : -0x3.ff800aaa0008882d8618478531p-12L : inexact-ok +expm1 0x1p-20 += expm1 downward flt-32 0x1p-20f : 0x1.000008p-20f : inexact-ok += expm1 tonearest flt-32 0x1p-20f : 0x1.000008p-20f : inexact-ok += expm1 towardzero flt-32 0x1p-20f : 0x1.000008p-20f : inexact-ok += expm1 upward flt-32 0x1p-20f : 0x1.00000ap-20f : inexact-ok += expm1 downward dbl-64 0x1p-20 : 0x1.00000800002aap-20 : inexact-ok += expm1 tonearest dbl-64 0x1p-20 : 0x1.00000800002abp-20 : inexact-ok += expm1 towardzero dbl-64 0x1p-20 : 0x1.00000800002aap-20 : inexact-ok += expm1 upward dbl-64 0x1p-20 : 0x1.00000800002abp-20 : inexact-ok += expm1 downward ldbl-96-intel 0x1p-20L : 0x1.00000800002aaaaap-20L : inexact-ok += expm1 tonearest ldbl-96-intel 0x1p-20L : 0x1.00000800002aaaacp-20L : inexact-ok += expm1 towardzero ldbl-96-intel 0x1p-20L : 0x1.00000800002aaaaap-20L : inexact-ok += expm1 upward ldbl-96-intel 0x1p-20L : 0x1.00000800002aaaacp-20L : inexact-ok += expm1 downward ldbl-96-m68k 0x1p-20L : 0x1.00000800002aaaaap-20L : inexact-ok += expm1 tonearest ldbl-96-m68k 0x1p-20L : 0x1.00000800002aaaacp-20L : inexact-ok += expm1 towardzero ldbl-96-m68k 0x1p-20L : 0x1.00000800002aaaaap-20L : inexact-ok += expm1 upward ldbl-96-m68k 0x1p-20L : 0x1.00000800002aaaacp-20L : inexact-ok += expm1 downward ldbl-128 0x1p-20L : 0x1.00000800002aaaab55555777777dp-20L : inexact-ok += expm1 tonearest ldbl-128 0x1p-20L : 0x1.00000800002aaaab55555777777dp-20L : inexact-ok += expm1 towardzero ldbl-128 0x1p-20L : 0x1.00000800002aaaab55555777777dp-20L : inexact-ok += expm1 upward ldbl-128 0x1p-20L : 0x1.00000800002aaaab55555777777ep-20L : inexact-ok += expm1 downward ldbl-128ibm 0x1p-20L : 0x1.00000800002aaaab5555577777p-20L : inexact-ok += expm1 tonearest ldbl-128ibm 0x1p-20L : 0x1.00000800002aaaab55555777778p-20L : inexact-ok += expm1 towardzero ldbl-128ibm 0x1p-20L : 0x1.00000800002aaaab5555577777p-20L : inexact-ok += expm1 upward ldbl-128ibm 0x1p-20L : 0x1.00000800002aaaab55555777778p-20L : inexact-ok +expm1 -0x1p-20 += expm1 downward flt-32 -0x1p-20f : -0xf.ffff9p-24f : inexact-ok += expm1 tonearest flt-32 -0x1p-20f : -0xf.ffff8p-24f : inexact-ok += expm1 towardzero flt-32 -0x1p-20f : -0xf.ffff8p-24f : inexact-ok += expm1 upward flt-32 -0x1p-20f : -0xf.ffff8p-24f : inexact-ok += expm1 downward dbl-64 -0x1p-20 : -0xf.ffff800002abp-24 : inexact-ok += expm1 tonearest dbl-64 -0x1p-20 : -0xf.ffff800002aa8p-24 : inexact-ok += expm1 towardzero dbl-64 -0x1p-20 : -0xf.ffff800002aa8p-24 : inexact-ok += expm1 upward dbl-64 -0x1p-20 : -0xf.ffff800002aa8p-24 : inexact-ok += expm1 downward ldbl-96-intel -0x1p-20L : -0xf.ffff800002aaaabp-24L : inexact-ok += expm1 tonearest ldbl-96-intel -0x1p-20L : -0xf.ffff800002aaaaap-24L : inexact-ok += expm1 towardzero ldbl-96-intel -0x1p-20L : -0xf.ffff800002aaaaap-24L : inexact-ok += expm1 upward ldbl-96-intel -0x1p-20L : -0xf.ffff800002aaaaap-24L : inexact-ok += expm1 downward ldbl-96-m68k -0x1p-20L : -0xf.ffff800002aaaabp-24L : inexact-ok += expm1 tonearest ldbl-96-m68k -0x1p-20L : -0xf.ffff800002aaaaap-24L : inexact-ok += expm1 towardzero ldbl-96-m68k -0x1p-20L : -0xf.ffff800002aaaaap-24L : inexact-ok += expm1 upward ldbl-96-m68k -0x1p-20L : -0xf.ffff800002aaaaap-24L : inexact-ok += expm1 downward ldbl-128 -0x1p-20L : -0xf.ffff800002aaaaa00000222221c8p-24L : inexact-ok += expm1 tonearest ldbl-128 -0x1p-20L : -0xf.ffff800002aaaaa00000222221c8p-24L : inexact-ok += expm1 towardzero ldbl-128 -0x1p-20L : -0xf.ffff800002aaaaa00000222221cp-24L : inexact-ok += expm1 upward ldbl-128 -0x1p-20L : -0xf.ffff800002aaaaa00000222221cp-24L : inexact-ok += expm1 downward ldbl-128ibm -0x1p-20L : -0xf.ffff800002aaaaa00000222224p-24L : inexact-ok += expm1 tonearest ldbl-128ibm -0x1p-20L : -0xf.ffff800002aaaaa0000022222p-24L : inexact-ok += expm1 towardzero ldbl-128ibm -0x1p-20L : -0xf.ffff800002aaaaa0000022222p-24L : inexact-ok += expm1 upward ldbl-128ibm -0x1p-20L : -0xf.ffff800002aaaaa0000022222p-24L : inexact-ok +expm1 0x1p-29 += expm1 downward flt-32 0x8p-32f : 0x8p-32f : inexact-ok += expm1 tonearest flt-32 0x8p-32f : 0x8p-32f : inexact-ok += expm1 towardzero flt-32 0x8p-32f : 0x8p-32f : inexact-ok += expm1 upward flt-32 0x8p-32f : 0x8.00001p-32f : inexact-ok += expm1 downward dbl-64 0x8p-32 : 0x8.0000002p-32 : inexact-ok += expm1 tonearest dbl-64 0x8p-32 : 0x8.0000002p-32 : inexact-ok += expm1 towardzero dbl-64 0x8p-32 : 0x8.0000002p-32 : inexact-ok += expm1 upward dbl-64 0x8p-32 : 0x8.0000002000008p-32 : inexact-ok += expm1 downward ldbl-96-intel 0x8p-32L : 0x8.000000200000005p-32L : inexact-ok += expm1 tonearest ldbl-96-intel 0x8p-32L : 0x8.000000200000005p-32L : inexact-ok += expm1 towardzero ldbl-96-intel 0x8p-32L : 0x8.000000200000005p-32L : inexact-ok += expm1 upward ldbl-96-intel 0x8p-32L : 0x8.000000200000006p-32L : inexact-ok += expm1 downward ldbl-96-m68k 0x8p-32L : 0x8.000000200000005p-32L : inexact-ok += expm1 tonearest ldbl-96-m68k 0x8p-32L : 0x8.000000200000005p-32L : inexact-ok += expm1 towardzero ldbl-96-m68k 0x8p-32L : 0x8.000000200000005p-32L : inexact-ok += expm1 upward ldbl-96-m68k 0x8p-32L : 0x8.000000200000006p-32L : inexact-ok += expm1 downward ldbl-128 0x8p-32L : 0x8.0000002000000055555556p-32L : inexact-ok += expm1 tonearest ldbl-128 0x8p-32L : 0x8.0000002000000055555556p-32L : inexact-ok += expm1 towardzero ldbl-128 0x8p-32L : 0x8.0000002000000055555556p-32L : inexact-ok += expm1 upward ldbl-128 0x8p-32L : 0x8.0000002000000055555556000008p-32L : inexact-ok += expm1 downward ldbl-128ibm 0x8p-32L : 0x8.0000002000000055555556p-32L : inexact-ok += expm1 tonearest ldbl-128ibm 0x8p-32L : 0x8.0000002000000055555556p-32L : inexact-ok += expm1 towardzero ldbl-128ibm 0x8p-32L : 0x8.0000002000000055555556p-32L : inexact-ok += expm1 upward ldbl-128ibm 0x8p-32L : 0x8.00000020000000555555560004p-32L : inexact-ok +expm1 -0x1p-29 += expm1 downward flt-32 -0x8p-32f : -0x8p-32f : inexact-ok += expm1 tonearest flt-32 -0x8p-32f : -0x8p-32f : inexact-ok += expm1 towardzero flt-32 -0x8p-32f : -0x7.fffff8p-32f : inexact-ok += expm1 upward flt-32 -0x8p-32f : -0x7.fffff8p-32f : inexact-ok += expm1 downward dbl-64 -0x8p-32 : -0x7.ffffffe000004p-32 : inexact-ok += expm1 tonearest dbl-64 -0x8p-32 : -0x7.ffffffep-32 : inexact-ok += expm1 towardzero dbl-64 -0x8p-32 : -0x7.ffffffep-32 : inexact-ok += expm1 upward dbl-64 -0x8p-32 : -0x7.ffffffep-32 : inexact-ok += expm1 downward ldbl-96-intel -0x8p-32L : -0x7.ffffffe000000058p-32L : inexact-ok += expm1 tonearest ldbl-96-intel -0x8p-32L : -0x7.ffffffe000000058p-32L : inexact-ok += expm1 towardzero ldbl-96-intel -0x8p-32L : -0x7.ffffffe00000005p-32L : inexact-ok += expm1 upward ldbl-96-intel -0x8p-32L : -0x7.ffffffe00000005p-32L : inexact-ok += expm1 downward ldbl-96-m68k -0x8p-32L : -0x7.ffffffe000000058p-32L : inexact-ok += expm1 tonearest ldbl-96-m68k -0x8p-32L : -0x7.ffffffe000000058p-32L : inexact-ok += expm1 towardzero ldbl-96-m68k -0x8p-32L : -0x7.ffffffe00000005p-32L : inexact-ok += expm1 upward ldbl-96-m68k -0x8p-32L : -0x7.ffffffe00000005p-32L : inexact-ok += expm1 downward ldbl-128 -0x8p-32L : -0x7.ffffffe000000055555554aaaaacp-32L : inexact-ok += expm1 tonearest ldbl-128 -0x8p-32L : -0x7.ffffffe000000055555554aaaaa8p-32L : inexact-ok += expm1 towardzero ldbl-128 -0x8p-32L : -0x7.ffffffe000000055555554aaaaa8p-32L : inexact-ok += expm1 upward ldbl-128 -0x8p-32L : -0x7.ffffffe000000055555554aaaaa8p-32L : inexact-ok += expm1 downward ldbl-128ibm -0x8p-32L : -0x7.ffffffe000000055555554aaacp-32L : inexact-ok += expm1 tonearest ldbl-128ibm -0x8p-32L : -0x7.ffffffe000000055555554aaaap-32L : inexact-ok += expm1 towardzero ldbl-128ibm -0x8p-32L : -0x7.ffffffe000000055555554aaaap-32L : inexact-ok += expm1 upward ldbl-128ibm -0x8p-32L : -0x7.ffffffe000000055555554aaaap-32L : inexact-ok +expm1 0x1p-32 += expm1 downward flt-32 0x1p-32f : 0x1p-32f : inexact-ok += expm1 tonearest flt-32 0x1p-32f : 0x1p-32f : inexact-ok += expm1 towardzero flt-32 0x1p-32f : 0x1p-32f : inexact-ok += expm1 upward flt-32 0x1p-32f : 0x1.000002p-32f : inexact-ok += expm1 downward dbl-64 0x1p-32 : 0x1.000000008p-32 : inexact-ok += expm1 tonearest dbl-64 0x1p-32 : 0x1.000000008p-32 : inexact-ok += expm1 towardzero dbl-64 0x1p-32 : 0x1.000000008p-32 : inexact-ok += expm1 upward dbl-64 0x1p-32 : 0x1.0000000080001p-32 : inexact-ok += expm1 downward ldbl-96-intel 0x1p-32L : 0x1.000000008p-32L : inexact-ok += expm1 tonearest ldbl-96-intel 0x1p-32L : 0x1.000000008p-32L : inexact-ok += expm1 towardzero ldbl-96-intel 0x1p-32L : 0x1.000000008p-32L : inexact-ok += expm1 upward ldbl-96-intel 0x1p-32L : 0x1.0000000080000002p-32L : inexact-ok += expm1 downward ldbl-96-m68k 0x1p-32L : 0x1.000000008p-32L : inexact-ok += expm1 tonearest ldbl-96-m68k 0x1p-32L : 0x1.000000008p-32L : inexact-ok += expm1 towardzero ldbl-96-m68k 0x1p-32L : 0x1.000000008p-32L : inexact-ok += expm1 upward ldbl-96-m68k 0x1p-32L : 0x1.0000000080000002p-32L : inexact-ok += expm1 downward ldbl-128 0x1p-32L : 0x1.00000000800000002aaaaaaab555p-32L : inexact-ok += expm1 tonearest ldbl-128 0x1p-32L : 0x1.00000000800000002aaaaaaab555p-32L : inexact-ok += expm1 towardzero ldbl-128 0x1p-32L : 0x1.00000000800000002aaaaaaab555p-32L : inexact-ok += expm1 upward ldbl-128 0x1p-32L : 0x1.00000000800000002aaaaaaab556p-32L : inexact-ok += expm1 downward ldbl-128ibm 0x1p-32L : 0x1.00000000800000002aaaaaaab5p-32L : inexact-ok += expm1 tonearest ldbl-128ibm 0x1p-32L : 0x1.00000000800000002aaaaaaab58p-32L : inexact-ok += expm1 towardzero ldbl-128ibm 0x1p-32L : 0x1.00000000800000002aaaaaaab5p-32L : inexact-ok += expm1 upward ldbl-128ibm 0x1p-32L : 0x1.00000000800000002aaaaaaab58p-32L : inexact-ok +expm1 -0x1p-32 += expm1 downward flt-32 -0x1p-32f : -0x1p-32f : inexact-ok += expm1 tonearest flt-32 -0x1p-32f : -0x1p-32f : inexact-ok += expm1 towardzero flt-32 -0x1p-32f : -0xf.fffffp-36f : inexact-ok += expm1 upward flt-32 -0x1p-32f : -0xf.fffffp-36f : inexact-ok += expm1 downward dbl-64 -0x1p-32 : -0xf.fffffff800008p-36 : inexact-ok += expm1 tonearest dbl-64 -0x1p-32 : -0xf.fffffff8p-36 : inexact-ok += expm1 towardzero dbl-64 -0x1p-32 : -0xf.fffffff8p-36 : inexact-ok += expm1 upward dbl-64 -0x1p-32 : -0xf.fffffff8p-36 : inexact-ok += expm1 downward ldbl-96-intel -0x1p-32L : -0xf.fffffff80000001p-36L : inexact-ok += expm1 tonearest ldbl-96-intel -0x1p-32L : -0xf.fffffff8p-36L : inexact-ok += expm1 towardzero ldbl-96-intel -0x1p-32L : -0xf.fffffff8p-36L : inexact-ok += expm1 upward ldbl-96-intel -0x1p-32L : -0xf.fffffff8p-36L : inexact-ok += expm1 downward ldbl-96-m68k -0x1p-32L : -0xf.fffffff80000001p-36L : inexact-ok += expm1 tonearest ldbl-96-m68k -0x1p-32L : -0xf.fffffff8p-36L : inexact-ok += expm1 towardzero ldbl-96-m68k -0x1p-32L : -0xf.fffffff8p-36L : inexact-ok += expm1 upward ldbl-96-m68k -0x1p-32L : -0xf.fffffff8p-36L : inexact-ok += expm1 downward ldbl-128 -0x1p-32L : -0xf.fffffff800000002aaaaaaaap-36L : inexact-ok += expm1 tonearest ldbl-128 -0x1p-32L : -0xf.fffffff800000002aaaaaaaap-36L : inexact-ok += expm1 towardzero ldbl-128 -0x1p-32L : -0xf.fffffff800000002aaaaaaa9fff8p-36L : inexact-ok += expm1 upward ldbl-128 -0x1p-32L : -0xf.fffffff800000002aaaaaaa9fff8p-36L : inexact-ok += expm1 downward ldbl-128ibm -0x1p-32L : -0xf.fffffff800000002aaaaaaaap-36L : inexact-ok += expm1 tonearest ldbl-128ibm -0x1p-32L : -0xf.fffffff800000002aaaaaaaap-36L : inexact-ok += expm1 towardzero ldbl-128ibm -0x1p-32L : -0xf.fffffff800000002aaaaaaa9fcp-36L : inexact-ok += expm1 upward ldbl-128ibm -0x1p-32L : -0xf.fffffff800000002aaaaaaa9fcp-36L : inexact-ok +expm1 0x1p-50 += expm1 downward flt-32 0x4p-52f : 0x4p-52f : inexact-ok += expm1 tonearest flt-32 0x4p-52f : 0x4p-52f : inexact-ok += expm1 towardzero flt-32 0x4p-52f : 0x4p-52f : inexact-ok += expm1 upward flt-32 0x4p-52f : 0x4.000008p-52f : inexact-ok += expm1 downward dbl-64 0x4p-52 : 0x4.0000000000008p-52 : inexact-ok += expm1 tonearest dbl-64 0x4p-52 : 0x4.0000000000008p-52 : inexact-ok += expm1 towardzero dbl-64 0x4p-52 : 0x4.0000000000008p-52 : inexact-ok += expm1 upward dbl-64 0x4p-52 : 0x4.000000000000cp-52 : inexact-ok += expm1 downward ldbl-96-intel 0x4p-52L : 0x4.0000000000008p-52L : inexact-ok += expm1 tonearest ldbl-96-intel 0x4p-52L : 0x4.0000000000008p-52L : inexact-ok += expm1 towardzero ldbl-96-intel 0x4p-52L : 0x4.0000000000008p-52L : inexact-ok += expm1 upward ldbl-96-intel 0x4p-52L : 0x4.0000000000008008p-52L : inexact-ok += expm1 downward ldbl-96-m68k 0x4p-52L : 0x4.0000000000008p-52L : inexact-ok += expm1 tonearest ldbl-96-m68k 0x4p-52L : 0x4.0000000000008p-52L : inexact-ok += expm1 towardzero ldbl-96-m68k 0x4p-52L : 0x4.0000000000008p-52L : inexact-ok += expm1 upward ldbl-96-m68k 0x4p-52L : 0x4.0000000000008008p-52L : inexact-ok += expm1 downward ldbl-128 0x4p-52L : 0x4.0000000000008000000000000aa8p-52L : inexact-ok += expm1 tonearest ldbl-128 0x4p-52L : 0x4.0000000000008000000000000aacp-52L : inexact-ok += expm1 towardzero ldbl-128 0x4p-52L : 0x4.0000000000008000000000000aa8p-52L : inexact-ok += expm1 upward ldbl-128 0x4p-52L : 0x4.0000000000008000000000000aacp-52L : inexact-ok += expm1 downward ldbl-128ibm 0x4p-52L : 0x4.0000000000008000000000000ap-52L : inexact-ok += expm1 tonearest ldbl-128ibm 0x4p-52L : 0x4.0000000000008000000000000ap-52L : inexact-ok += expm1 towardzero ldbl-128ibm 0x4p-52L : 0x4.0000000000008000000000000ap-52L : inexact-ok += expm1 upward ldbl-128ibm 0x4p-52L : 0x4.0000000000008000000000000cp-52L : inexact-ok +expm1 -0x1p-50 += expm1 downward flt-32 -0x4p-52f : -0x4p-52f : inexact-ok += expm1 tonearest flt-32 -0x4p-52f : -0x4p-52f : inexact-ok += expm1 towardzero flt-32 -0x4p-52f : -0x3.fffffcp-52f : inexact-ok += expm1 upward flt-32 -0x4p-52f : -0x3.fffffcp-52f : inexact-ok += expm1 downward dbl-64 -0x4p-52 : -0x3.ffffffffffffap-52 : inexact-ok += expm1 tonearest dbl-64 -0x4p-52 : -0x3.ffffffffffff8p-52 : inexact-ok += expm1 towardzero dbl-64 -0x4p-52 : -0x3.ffffffffffff8p-52 : inexact-ok += expm1 upward dbl-64 -0x4p-52 : -0x3.ffffffffffff8p-52 : inexact-ok += expm1 downward ldbl-96-intel -0x4p-52L : -0x3.ffffffffffff8004p-52L : inexact-ok += expm1 tonearest ldbl-96-intel -0x4p-52L : -0x3.ffffffffffff8p-52L : inexact-ok += expm1 towardzero ldbl-96-intel -0x4p-52L : -0x3.ffffffffffff8p-52L : inexact-ok += expm1 upward ldbl-96-intel -0x4p-52L : -0x3.ffffffffffff8p-52L : inexact-ok |
