Fix tan missing underflows (bug 16517).

Similar to various other bugs in this area, some tan implementations
do not raise the underflow exception for subnormal arguments, when the
result is tiny and inexact.  This patch forces the exception in a
similar way to previous fixes.

Tested for x86_64, x86, mips64 and powerpc.

	[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.
This commit is contained in:
Joseph Myers 2015-08-07 23:10:35 +00:00
parent db2bcbcb63
commit 37550cb3d6
9 changed files with 393 additions and 5 deletions

View File

@ -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

2
NEWS
View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;
}

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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)