diff options
-rw-r--r-- | ChangeLog | 21 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | math/auto-libm-test-in | 4 | ||||
-rw-r--r-- | math/auto-libm-test-out | 316 | ||||
-rw-r--r-- | sysdeps/ieee754/dbl-64/s_tan.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/flt-32/k_tanf.c | 13 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128/k_tanl.c | 12 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/k_tanl.c | 12 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-96/k_tanl.c | 12 |
9 files changed, 393 insertions, 5 deletions
@@ -1,3 +1,24 @@ +2015-08-07 Joseph Myers <joseph@codesourcery.com> + + [BZ #16517] + * sysdeps/ieee754/dbl-64/s_tan.c: Include <float.h>. + (tan): Force underflow exception for arguments with small absolute + value. + * sysdeps/ieee754/flt-32/k_tanf.c: Include <float.h>. + (__kernel_tanf): Force underflow exception for arguments with + small absolute value. + * sysdeps/ieee754/ldbl-128/k_tanl.c: Include <float.h>. + (__kernel_tanl): Force underflow exception for arguments with + small absolute value. + * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: Include <float.h>. + (__kernel_tanl): Force underflow exception for arguments with + small absolute value. + * sysdeps/ieee754/ldbl-96/k_tanl.c: Include <float.h>. + (__kernel_tanl): Force underflow exception for arguments with + small absolute value. + * math/auto-libm-test-in: Add more tests of tan. + * math/auto-libm-test-out: Regenerated. + 2015-08-07 Samuel Thibault <samuel.thibault@ens-lyon.org> Fix sysdeps/i386/fpu/s_scalbn.S build @@ -8,7 +8,7 @@ using `glibc' in the "product" field. Version 2.23 * The following bugs are resolved with this release: - 16519, 18265, 18525, 18618, 18647, 18661. + 16517, 16519, 18265, 18525, 18618, 18647, 18661. Version 2.22 diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in index cc9b7fd..bb6d30e 100644 --- a/math/auto-libm-test-in +++ b/math/auto-libm-test-in @@ -2659,6 +2659,10 @@ tan 9 tan 10 tan -0x1.062a48p+0 tan -0x1.4f69cp+0 +tan min +tan -min +tan min_subnorm +tan -min_subnorm tanh 0 tanh -0 diff --git a/math/auto-libm-test-out b/math/auto-libm-test-out index 81abc0c..a310394 100644 --- a/math/auto-libm-test-out +++ b/math/auto-libm-test-out @@ -201183,6 +201183,322 @@ tan -0x1.4f69cp+0 = tan tonearest ldbl-128ibm -0x1.4f69cp+0L : -0x3.c00d4280aa7bede62d35d88621p+0L : inexact-ok = tan towardzero ldbl-128ibm -0x1.4f69cp+0L : -0x3.c00d4280aa7bede62d35d8862p+0L : inexact-ok = tan upward ldbl-128ibm -0x1.4f69cp+0L : -0x3.c00d4280aa7bede62d35d8862p+0L : inexact-ok +tan min += tan downward flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok += tan tonearest flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok += tan towardzero flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok += tan upward flt-32 0x4p-128f : 0x4.000008p-128f : inexact-ok underflow-ok errno-erange-ok += tan downward dbl-64 0x4p-128 : 0x4p-128 : inexact-ok += tan tonearest dbl-64 0x4p-128 : 0x4p-128 : inexact-ok += tan towardzero dbl-64 0x4p-128 : 0x4p-128 : inexact-ok += tan upward dbl-64 0x4p-128 : 0x4.0000000000004p-128 : inexact-ok += tan downward ldbl-96-intel 0x4p-128L : 0x4p-128L : inexact-ok += tan tonearest ldbl-96-intel 0x4p-128L : 0x4p-128L : inexact-ok += tan towardzero ldbl-96-intel 0x4p-128L : 0x4p-128L : inexact-ok += tan upward ldbl-96-intel 0x4p-128L : 0x4.0000000000000008p-128L : inexact-ok += tan downward ldbl-96-m68k 0x4p-128L : 0x4p-128L : inexact-ok += tan tonearest ldbl-96-m68k 0x4p-128L : 0x4p-128L : inexact-ok += tan towardzero ldbl-96-m68k 0x4p-128L : 0x4p-128L : inexact-ok += tan upward ldbl-96-m68k 0x4p-128L : 0x4.0000000000000008p-128L : inexact-ok += tan downward ldbl-128 0x4p-128L : 0x4p-128L : inexact-ok += tan tonearest ldbl-128 0x4p-128L : 0x4p-128L : inexact-ok += tan towardzero ldbl-128 0x4p-128L : 0x4p-128L : inexact-ok += tan upward ldbl-128 0x4p-128L : 0x4.0000000000000000000000000004p-128L : inexact-ok += tan downward ldbl-128ibm 0x4p-128L : 0x4p-128L : inexact-ok += tan tonearest ldbl-128ibm 0x4p-128L : 0x4p-128L : inexact-ok += tan towardzero ldbl-128ibm 0x4p-128L : 0x4p-128L : inexact-ok += tan upward ldbl-128ibm 0x4p-128L : 0x4.00000000000000000000000002p-128L : inexact-ok += tan downward dbl-64 0x4p-1024 : 0x4p-1024 : inexact-ok underflow-ok errno-erange-ok += tan tonearest dbl-64 0x4p-1024 : 0x4p-1024 : inexact-ok underflow-ok errno-erange-ok += tan towardzero dbl-64 0x4p-1024 : 0x4p-1024 : inexact-ok underflow-ok errno-erange-ok += tan upward dbl-64 0x4p-1024 : 0x4.0000000000004p-1024 : inexact-ok underflow-ok errno-erange-ok += tan downward ldbl-96-intel 0x4p-1024L : 0x4p-1024L : inexact-ok += tan tonearest ldbl-96-intel 0x4p-1024L : 0x4p-1024L : inexact-ok += tan towardzero ldbl-96-intel 0x4p-1024L : 0x4p-1024L : inexact-ok += tan upward ldbl-96-intel 0x4p-1024L : 0x4.0000000000000008p-1024L : inexact-ok += tan downward ldbl-96-m68k 0x4p-1024L : 0x4p-1024L : inexact-ok += tan tonearest ldbl-96-m68k 0x4p-1024L : 0x4p-1024L : inexact-ok += tan towardzero ldbl-96-m68k 0x4p-1024L : 0x4p-1024L : inexact-ok += tan upward ldbl-96-m68k 0x4p-1024L : 0x4.0000000000000008p-1024L : inexact-ok += tan downward ldbl-128 0x4p-1024L : 0x4p-1024L : inexact-ok += tan tonearest ldbl-128 0x4p-1024L : 0x4p-1024L : inexact-ok += tan towardzero ldbl-128 0x4p-1024L : 0x4p-1024L : inexact-ok += tan upward ldbl-128 0x4p-1024L : 0x4.0000000000000000000000000004p-1024L : inexact-ok += tan downward ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow errno-erange-ok += tan upward ldbl-128ibm 0x4p-1024L : 0x4.0000000000004p-1024L : inexact-ok underflow errno-erange-ok += tan downward ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok += tan tonearest ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok += tan towardzero ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok += tan upward ldbl-96-intel 0x4p-16384L : 0x4.0000000000000008p-16384L : inexact-ok underflow-ok errno-erange-ok += tan downward ldbl-96-m68k 0x4p-16384L : 0x4p-16384L : inexact-ok += tan tonearest ldbl-96-m68k 0x4p-16384L : 0x4p-16384L : inexact-ok += tan towardzero ldbl-96-m68k 0x4p-16384L : 0x4p-16384L : inexact-ok += tan upward ldbl-96-m68k 0x4p-16384L : 0x4.0000000000000008p-16384L : inexact-ok += tan downward ldbl-128 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok += tan tonearest ldbl-128 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok += tan towardzero ldbl-128 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok += tan upward ldbl-128 0x4p-16384L : 0x4.0000000000000000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok += tan downward ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok += tan upward ldbl-96-intel 0x2p-16384L : 0x2.0000000000000008p-16384L : inexact-ok underflow errno-erange-ok += tan downward ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok += tan tonearest ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok += tan towardzero ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok += tan upward ldbl-96-m68k 0x2p-16384L : 0x2.0000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok += tan downward ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok += tan upward ldbl-128 0x2p-16384L : 0x2.0000000000000000000000000004p-16384L : inexact-ok underflow errno-erange-ok += tan downward dbl-64 0x8p-972 : 0x8p-972 : inexact-ok += tan tonearest dbl-64 0x8p-972 : 0x8p-972 : inexact-ok += tan towardzero dbl-64 0x8p-972 : 0x8p-972 : inexact-ok += tan upward dbl-64 0x8p-972 : 0x8.0000000000008p-972 : inexact-ok += tan downward ldbl-96-intel 0x8p-972L : 0x8p-972L : inexact-ok += tan tonearest ldbl-96-intel 0x8p-972L : 0x8p-972L : inexact-ok += tan towardzero ldbl-96-intel 0x8p-972L : 0x8p-972L : inexact-ok += tan upward ldbl-96-intel 0x8p-972L : 0x8.000000000000001p-972L : inexact-ok += tan downward ldbl-96-m68k 0x8p-972L : 0x8p-972L : inexact-ok += tan tonearest ldbl-96-m68k 0x8p-972L : 0x8p-972L : inexact-ok += tan towardzero ldbl-96-m68k 0x8p-972L : 0x8p-972L : inexact-ok += tan upward ldbl-96-m68k 0x8p-972L : 0x8.000000000000001p-972L : inexact-ok += tan downward ldbl-128 0x8p-972L : 0x8p-972L : inexact-ok += tan tonearest ldbl-128 0x8p-972L : 0x8p-972L : inexact-ok += tan towardzero ldbl-128 0x8p-972L : 0x8p-972L : inexact-ok += tan upward ldbl-128 0x8p-972L : 0x8.0000000000000000000000000008p-972L : inexact-ok += tan downward ldbl-128ibm 0x8p-972L : 0x8p-972L : inexact-ok underflow-ok errno-erange-ok += tan tonearest ldbl-128ibm 0x8p-972L : 0x8p-972L : inexact-ok underflow-ok errno-erange-ok += tan towardzero ldbl-128ibm 0x8p-972L : 0x8p-972L : inexact-ok underflow-ok errno-erange-ok += tan upward ldbl-128ibm 0x8p-972L : 0x8.00000000000000000000000004p-972L : inexact-ok underflow-ok errno-erange-ok +tan -min += tan downward flt-32 -0x4p-128f : -0x4.000008p-128f : inexact-ok underflow-ok errno-erange-ok += tan tonearest flt-32 -0x4p-128f : -0x4p-128f : inexact-ok underflow-ok errno-erange-ok += tan towardzero flt-32 -0x4p-128f : -0x4p-128f : inexact-ok underflow-ok errno-erange-ok += tan upward flt-32 -0x4p-128f : -0x4p-128f : inexact-ok underflow-ok errno-erange-ok += tan downward dbl-64 -0x4p-128 : -0x4.0000000000004p-128 : inexact-ok += tan tonearest dbl-64 -0x4p-128 : -0x4p-128 : inexact-ok += tan towardzero dbl-64 -0x4p-128 : -0x4p-128 : inexact-ok += tan upward dbl-64 -0x4p-128 : -0x4p-128 : inexact-ok += tan downward ldbl-96-intel -0x4p-128L : -0x4.0000000000000008p-128L : inexact-ok += tan tonearest ldbl-96-intel -0x4p-128L : -0x4p-128L : inexact-ok += tan towardzero ldbl-96-intel -0x4p-128L : -0x4p-128L : inexact-ok += tan upward ldbl-96-intel -0x4p-128L : -0x4p-128L : inexact-ok += tan downward ldbl-96-m68k -0x4p-128L : -0x4.0000000000000008p-128L : inexact-ok += tan tonearest ldbl-96-m68k -0x4p-128L : -0x4p-128L : inexact-ok += tan towardzero ldbl-96-m68k -0x4p-128L : -0x4p-128L : inexact-ok += tan upward ldbl-96-m68k -0x4p-128L : -0x4p-128L : inexact-ok += tan downward ldbl-128 -0x4p-128L : -0x4.0000000000000000000000000004p-128L : inexact-ok += tan tonearest ldbl-128 -0x4p-128L : -0x4p-128L : inexact-ok += tan towardzero ldbl-128 -0x4p-128L : -0x4p-128L : inexact-ok += tan upward ldbl-128 -0x4p-128L : -0x4p-128L : inexact-ok += tan downward ldbl-128ibm -0x4p-128L : -0x4.00000000000000000000000002p-128L : inexact-ok += tan tonearest ldbl-128ibm -0x4p-128L : -0x4p-128L : inexact-ok += tan towardzero ldbl-128ibm -0x4p-128L : -0x4p-128L : inexact-ok += tan upward ldbl-128ibm -0x4p-128L : -0x4p-128L : inexact-ok += tan downward dbl-64 -0x4p-1024 : -0x4.0000000000004p-1024 : inexact-ok underflow-ok errno-erange-ok += tan tonearest dbl-64 -0x4p-1024 : -0x4p-1024 : inexact-ok underflow-ok errno-erange-ok += tan towardzero dbl-64 -0x4p-1024 : -0x4p-1024 : inexact-ok underflow-ok errno-erange-ok += tan upward dbl-64 -0x4p-1024 : -0x4p-1024 : inexact-ok underflow-ok errno-erange-ok += tan downward ldbl-96-intel -0x4p-1024L : -0x4.0000000000000008p-1024L : inexact-ok += tan tonearest ldbl-96-intel -0x4p-1024L : -0x4p-1024L : inexact-ok += tan towardzero ldbl-96-intel -0x4p-1024L : -0x4p-1024L : inexact-ok += tan upward ldbl-96-intel -0x4p-1024L : -0x4p-1024L : inexact-ok += tan downward ldbl-96-m68k -0x4p-1024L : -0x4.0000000000000008p-1024L : inexact-ok += tan tonearest ldbl-96-m68k -0x4p-1024L : -0x4p-1024L : inexact-ok += tan towardzero ldbl-96-m68k -0x4p-1024L : -0x4p-1024L : inexact-ok += tan upward ldbl-96-m68k -0x4p-1024L : -0x4p-1024L : inexact-ok += tan downward ldbl-128 -0x4p-1024L : -0x4.0000000000000000000000000004p-1024L : inexact-ok += tan tonearest ldbl-128 -0x4p-1024L : -0x4p-1024L : inexact-ok += tan towardzero ldbl-128 -0x4p-1024L : -0x4p-1024L : inexact-ok += tan upward ldbl-128 -0x4p-1024L : -0x4p-1024L : inexact-ok += tan downward ldbl-128ibm -0x4p-1024L : -0x4.0000000000004p-1024L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow errno-erange-ok += tan upward ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow errno-erange-ok += tan downward ldbl-96-intel -0x4p-16384L : -0x4.0000000000000008p-16384L : inexact-ok underflow-ok errno-erange-ok += tan tonearest ldbl-96-intel -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok += tan towardzero ldbl-96-intel -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok += tan upward ldbl-96-intel -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok += tan downward ldbl-96-m68k -0x4p-16384L : -0x4.0000000000000008p-16384L : inexact-ok += tan tonearest ldbl-96-m68k -0x4p-16384L : -0x4p-16384L : inexact-ok += tan towardzero ldbl-96-m68k -0x4p-16384L : -0x4p-16384L : inexact-ok += tan upward ldbl-96-m68k -0x4p-16384L : -0x4p-16384L : inexact-ok += tan downward ldbl-128 -0x4p-16384L : -0x4.0000000000000000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok += tan tonearest ldbl-128 -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok += tan towardzero ldbl-128 -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok += tan upward ldbl-128 -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok += tan downward ldbl-96-intel -0x2p-16384L : -0x2.0000000000000008p-16384L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok += tan upward ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok += tan downward ldbl-96-m68k -0x2p-16384L : -0x2.0000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok += tan tonearest ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok += tan towardzero ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok += tan upward ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok += tan downward ldbl-128 -0x2p-16384L : -0x2.0000000000000000000000000004p-16384L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok += tan upward ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok += tan downward dbl-64 -0x8p-972 : -0x8.0000000000008p-972 : inexact-ok += tan tonearest dbl-64 -0x8p-972 : -0x8p-972 : inexact-ok += tan towardzero dbl-64 -0x8p-972 : -0x8p-972 : inexact-ok += tan upward dbl-64 -0x8p-972 : -0x8p-972 : inexact-ok += tan downward ldbl-96-intel -0x8p-972L : -0x8.000000000000001p-972L : inexact-ok += tan tonearest ldbl-96-intel -0x8p-972L : -0x8p-972L : inexact-ok += tan towardzero ldbl-96-intel -0x8p-972L : -0x8p-972L : inexact-ok += tan upward ldbl-96-intel -0x8p-972L : -0x8p-972L : inexact-ok += tan downward ldbl-96-m68k -0x8p-972L : -0x8.000000000000001p-972L : inexact-ok += tan tonearest ldbl-96-m68k -0x8p-972L : -0x8p-972L : inexact-ok += tan towardzero ldbl-96-m68k -0x8p-972L : -0x8p-972L : inexact-ok += tan upward ldbl-96-m68k -0x8p-972L : -0x8p-972L : inexact-ok += tan downward ldbl-128 -0x8p-972L : -0x8.0000000000000000000000000008p-972L : inexact-ok += tan tonearest ldbl-128 -0x8p-972L : -0x8p-972L : inexact-ok += tan towardzero ldbl-128 -0x8p-972L : -0x8p-972L : inexact-ok += tan upward ldbl-128 -0x8p-972L : -0x8p-972L : inexact-ok += tan downward ldbl-128ibm -0x8p-972L : -0x8.00000000000000000000000004p-972L : inexact-ok underflow-ok errno-erange-ok += tan tonearest ldbl-128ibm -0x8p-972L : -0x8p-972L : inexact-ok underflow-ok errno-erange-ok += tan towardzero ldbl-128ibm -0x8p-972L : -0x8p-972L : inexact-ok underflow-ok errno-erange-ok += tan upward ldbl-128ibm -0x8p-972L : -0x8p-972L : inexact-ok underflow-ok errno-erange-ok +tan min_subnorm += tan downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok += tan tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok += tan towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok += tan upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow errno-erange-ok += tan downward dbl-64 0x8p-152 : 0x8p-152 : inexact-ok += tan tonearest dbl-64 0x8p-152 : 0x8p-152 : inexact-ok += tan towardzero dbl-64 0x8p-152 : 0x8p-152 : inexact-ok += tan upward dbl-64 0x8p-152 : 0x8.0000000000008p-152 : inexact-ok += tan downward ldbl-96-intel 0x8p-152L : 0x8p-152L : inexact-ok += tan tonearest ldbl-96-intel 0x8p-152L : 0x8p-152L : inexact-ok += tan towardzero ldbl-96-intel 0x8p-152L : 0x8p-152L : inexact-ok += tan upward ldbl-96-intel 0x8p-152L : 0x8.000000000000001p-152L : inexact-ok += tan downward ldbl-96-m68k 0x8p-152L : 0x8p-152L : inexact-ok += tan tonearest ldbl-96-m68k 0x8p-152L : 0x8p-152L : inexact-ok += tan towardzero ldbl-96-m68k 0x8p-152L : 0x8p-152L : inexact-ok += tan upward ldbl-96-m68k 0x8p-152L : 0x8.000000000000001p-152L : inexact-ok += tan downward ldbl-128 0x8p-152L : 0x8p-152L : inexact-ok += tan tonearest ldbl-128 0x8p-152L : 0x8p-152L : inexact-ok += tan towardzero ldbl-128 0x8p-152L : 0x8p-152L : inexact-ok += tan upward ldbl-128 0x8p-152L : 0x8.0000000000000000000000000008p-152L : inexact-ok += tan downward ldbl-128ibm 0x8p-152L : 0x8p-152L : inexact-ok += tan tonearest ldbl-128ibm 0x8p-152L : 0x8p-152L : inexact-ok += tan towardzero ldbl-128ibm 0x8p-152L : 0x8p-152L : inexact-ok += tan upward ldbl-128ibm 0x8p-152L : 0x8.00000000000000000000000004p-152L : inexact-ok += tan downward dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok += tan tonearest dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok += tan towardzero dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok += tan upward dbl-64 0x4p-1076 : 0x8p-1076 : inexact-ok underflow errno-erange-ok += tan downward ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok += tan tonearest ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok += tan towardzero ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok += tan upward ldbl-96-intel 0x4p-1076L : 0x4.0000000000000008p-1076L : inexact-ok += tan downward ldbl-96-m68k 0x4p-1076L : 0x4p-1076L : inexact-ok += tan tonearest ldbl-96-m68k 0x4p-1076L : 0x4p-1076L : inexact-ok += tan towardzero ldbl-96-m68k 0x4p-1076L : 0x4p-1076L : inexact-ok += tan upward ldbl-96-m68k 0x4p-1076L : 0x4.0000000000000008p-1076L : inexact-ok += tan downward ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok += tan tonearest ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok += tan towardzero ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok += tan upward ldbl-128 0x4p-1076L : 0x4.0000000000000000000000000004p-1076L : inexact-ok += tan downward ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok += tan upward ldbl-128ibm 0x4p-1076L : 0x8p-1076L : inexact-ok underflow errno-erange-ok += tan downward ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok += tan upward ldbl-96-intel 0x8p-16448L : 0x1p-16444L : inexact-ok underflow errno-erange-ok += tan downward ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok += tan upward ldbl-96-m68k 0x8p-16448L : 0xcp-16448L : inexact-ok underflow errno-erange-ok += tan downward ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok += tan upward ldbl-128 0x8p-16448L : 0x8.000000000004p-16448L : inexact-ok underflow errno-erange-ok += tan downward ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok += tan upward ldbl-96-m68k 0x4p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok += tan downward ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok += tan upward ldbl-128 0x4p-16448L : 0x4.000000000004p-16448L : inexact-ok underflow errno-erange-ok += tan downward ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow errno-erange-ok += tan upward ldbl-128 0x4p-16496L : 0x8p-16496L : inexact-ok underflow errno-erange-ok +tan -min_subnorm += tan downward flt-32 -0x8p-152f : -0x1p-148f : inexact-ok underflow errno-erange-ok += tan tonearest flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow errno-erange-ok += tan towardzero flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow errno-erange-ok += tan upward flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow errno-erange-ok += tan downward dbl-64 -0x8p-152 : -0x8.0000000000008p-152 : inexact-ok += tan tonearest dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok += tan towardzero dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok += tan upward dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok += tan downward ldbl-96-intel -0x8p-152L : -0x8.000000000000001p-152L : inexact-ok += tan tonearest ldbl-96-intel -0x8p-152L : -0x8p-152L : inexact-ok += tan towardzero ldbl-96-intel -0x8p-152L : -0x8p-152L : inexact-ok += tan upward ldbl-96-intel -0x8p-152L : -0x8p-152L : inexact-ok += tan downward ldbl-96-m68k -0x8p-152L : -0x8.000000000000001p-152L : inexact-ok += tan tonearest ldbl-96-m68k -0x8p-152L : -0x8p-152L : inexact-ok += tan towardzero ldbl-96-m68k -0x8p-152L : -0x8p-152L : inexact-ok += tan upward ldbl-96-m68k -0x8p-152L : -0x8p-152L : inexact-ok += tan downward ldbl-128 -0x8p-152L : -0x8.0000000000000000000000000008p-152L : inexact-ok += tan tonearest ldbl-128 -0x8p-152L : -0x8p-152L : inexact-ok += tan towardzero ldbl-128 -0x8p-152L : -0x8p-152L : inexact-ok += tan upward ldbl-128 -0x8p-152L : -0x8p-152L : inexact-ok += tan downward ldbl-128ibm -0x8p-152L : -0x8.00000000000000000000000004p-152L : inexact-ok += tan tonearest ldbl-128ibm -0x8p-152L : -0x8p-152L : inexact-ok += tan towardzero ldbl-128ibm -0x8p-152L : -0x8p-152L : inexact-ok += tan upward ldbl-128ibm -0x8p-152L : -0x8p-152L : inexact-ok += tan downward dbl-64 -0x4p-1076 : -0x8p-1076 : inexact-ok underflow errno-erange-ok += tan tonearest dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow errno-erange-ok += tan towardzero dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow errno-erange-ok += tan upward dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow errno-erange-ok += tan downward ldbl-96-intel -0x4p-1076L : -0x4.0000000000000008p-1076L : inexact-ok += tan tonearest ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok += tan towardzero ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok += tan upward ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok += tan downward ldbl-96-m68k -0x4p-1076L : -0x4.0000000000000008p-1076L : inexact-ok += tan tonearest ldbl-96-m68k -0x4p-1076L : -0x4p-1076L : inexact-ok += tan towardzero ldbl-96-m68k -0x4p-1076L : -0x4p-1076L : inexact-ok += tan upward ldbl-96-m68k -0x4p-1076L : -0x4p-1076L : inexact-ok += tan downward ldbl-128 -0x4p-1076L : -0x4.0000000000000000000000000004p-1076L : inexact-ok += tan tonearest ldbl-128 -0x4p-1076L : -0x4p-1076L : inexact-ok += tan towardzero ldbl-128 -0x4p-1076L : -0x4p-1076L : inexact-ok += tan upward ldbl-128 -0x4p-1076L : -0x4p-1076L : inexact-ok += tan downward ldbl-128ibm -0x4p-1076L : -0x8p-1076L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow errno-erange-ok += tan upward ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow errno-erange-ok += tan downward ldbl-96-intel -0x8p-16448L : -0x1p-16444L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok += tan upward ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok += tan downward ldbl-96-m68k -0x8p-16448L : -0xcp-16448L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok += tan upward ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok += tan downward ldbl-128 -0x8p-16448L : -0x8.000000000004p-16448L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok += tan upward ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok += tan downward ldbl-96-m68k -0x4p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok += tan upward ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok += tan downward ldbl-128 -0x4p-16448L : -0x4.000000000004p-16448L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok += tan upward ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok += tan downward ldbl-128 -0x4p-16496L : -0x8p-16496L : inexact-ok underflow errno-erange-ok += tan tonearest ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow errno-erange-ok += tan towardzero ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow errno-erange-ok += tan upward ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow errno-erange-ok tanh 0 = tanh downward flt-32 0x0p+0f : 0x0p+0f : inexact-ok = tanh tonearest flt-32 0x0p+0f : 0x0p+0f : inexact-ok diff --git a/sysdeps/ieee754/dbl-64/s_tan.c b/sysdeps/ieee754/dbl-64/s_tan.c index dcb4aca..b4e3bd2 100644 --- a/sysdeps/ieee754/dbl-64/s_tan.c +++ b/sysdeps/ieee754/dbl-64/s_tan.c @@ -34,6 +34,7 @@ /*********************************************************************/ #include <errno.h> +#include <float.h> #include "endian.h" #include <dla.h> #include "mpa.h" @@ -91,6 +92,11 @@ tan (double x) /* (I) The case abs(x) <= 1.259e-8 */ if (w <= g1.d) { + if (w < DBL_MIN) + { + double force_underflow = x * x; + math_force_eval (force_underflow); + } retval = x; goto ret; } diff --git a/sysdeps/ieee754/flt-32/k_tanf.c b/sysdeps/ieee754/flt-32/k_tanf.c index a67f36e..2f2076d 100644 --- a/sysdeps/ieee754/flt-32/k_tanf.c +++ b/sysdeps/ieee754/flt-32/k_tanf.c @@ -17,6 +17,7 @@ static char rcsid[] = "$NetBSD: k_tanf.c,v 1.4 1995/05/10 20:46:39 jtc Exp $"; #endif +#include <float.h> #include <math.h> #include <math_private.h> static const float @@ -48,7 +49,17 @@ float __kernel_tanf(float x, float y, int iy) if(ix<0x39000000) /* x < 2**-13 */ {if((int)x==0) { /* generate inexact */ if((ix|(iy+1))==0) return one/fabsf(x); - else return (iy==1)? x: -one/x; + else if (iy == 1) + { + if (fabsf (x) < FLT_MIN) + { + float force_underflow = x * x; + math_force_eval (force_underflow); + } + return x; + } + else + return -one / x; } } if(ix>=0x3f2ca140) { /* |x|>=0.6744 */ diff --git a/sysdeps/ieee754/ldbl-128/k_tanl.c b/sysdeps/ieee754/ldbl-128/k_tanl.c index dfba2d9..6a6fa9f 100644 --- a/sysdeps/ieee754/ldbl-128/k_tanl.c +++ b/sysdeps/ieee754/ldbl-128/k_tanl.c @@ -56,6 +56,7 @@ * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) */ +#include <float.h> #include <libc-internal.h> #include <math.h> #include <math_private.h> @@ -98,8 +99,17 @@ __kernel_tanl (long double x, long double y, int iy) if ((ix | u.parts32.w1 | u.parts32.w2 | u.parts32.w3 | (iy + 1)) == 0) return one / fabs (x); + else if (iy == 1) + { + if (fabsl (x) < LDBL_MIN) + { + long double force_underflow = x * x; + math_force_eval (force_underflow); + } + return x; + } else - return (iy == 1) ? x : -one / x; + return -one / x; } } if (ix >= 0x3ffe5942) /* |x| >= 0.6743316650390625 */ diff --git a/sysdeps/ieee754/ldbl-128ibm/k_tanl.c b/sysdeps/ieee754/ldbl-128ibm/k_tanl.c index 7f1caee..e50cc88 100644 --- a/sysdeps/ieee754/ldbl-128ibm/k_tanl.c +++ b/sysdeps/ieee754/ldbl-128ibm/k_tanl.c @@ -56,6 +56,7 @@ * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) */ +#include <float.h> #include <libc-internal.h> #include <math.h> #include <math_private.h> @@ -98,8 +99,17 @@ __kernel_tanl (long double x, long double y, int iy) { if ((ix | lx | (iy + 1)) == 0) return one / fabs (x); + else if (iy == 1) + { + if (fabsl (x) < LDBL_MIN) + { + long double force_underflow = x * x; + math_force_eval (force_underflow); + } + return x; + } else - return (iy == 1) ? x : -one / x; + return -one / x; } } if (ix >= 0x3fe59420) /* |x| >= 0.6743316650390625 */ diff --git a/sysdeps/ieee754/ldbl-96/k_tanl.c b/sysdeps/ieee754/ldbl-96/k_tanl.c index 31cd236..ae6821d 100644 --- a/sysdeps/ieee754/ldbl-96/k_tanl.c +++ b/sysdeps/ieee754/ldbl-96/k_tanl.c @@ -56,6 +56,7 @@ * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) */ +#include <float.h> #include <math.h> #include <math_private.h> static const long double @@ -94,8 +95,17 @@ __kernel_tanl (long double x, long double y, int iy) { /* generate inexact */ if (x == 0 && iy == -1) return one / fabsl (x); + else if (iy == 1) + { + if (absx < LDBL_MIN) + { + long double force_underflow = x * x; + math_force_eval (force_underflow); + } + return x; + } else - return (iy == 1) ? x : -one / x; + return -one / x; } } if (absx >= 0.6743316650390625L) |