about summary refs log tree commit diff
path: root/math
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-08-07 23:10:35 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-08-07 23:10:35 +0000
commit37550cb3d6591a8f443467707ec80b4ab5c2e157 (patch)
tree934ef1da0ab3a2cd9d0a23b1645392914e95afcc /math
parentdb2bcbcb631f1c1aa023ef9f23a968e1ac288423 (diff)
downloadglibc-37550cb3d6591a8f443467707ec80b4ab5c2e157.tar.gz
glibc-37550cb3d6591a8f443467707ec80b4ab5c2e157.tar.xz
glibc-37550cb3d6591a8f443467707ec80b4ab5c2e157.zip
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.
Diffstat (limited to 'math')
-rw-r--r--math/auto-libm-test-in4
-rw-r--r--math/auto-libm-test-out316
2 files changed, 320 insertions, 0 deletions
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index cc9b7fd318..bb6d30e6f5 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 81abc0cf4d..a31039419d 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