Fix atanhl missing underflows (bug 16352).

Similar to various other bugs in this area, some atanh 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.  (No change in this regard is needed
for the i386 implementation; special handling to force underflows in
these cases will only be needed there when the spurious underflows,
bug 18049, get fixed.)

Tested for x86_64, x86, powerpc and mips64.

	[BZ #16352]
	* sysdeps/i386/fpu/e_atanh.S (dbl_min): New object.
	(__ieee754_atanh): Force underflow exception for results with
	small absolute value.
	* sysdeps/i386/fpu/e_atanhf.S (flt_min): New object.
	(__ieee754_atanhf): Force underflow exception for results with
	small absolute value.
	* sysdeps/ieee754/dbl-64/e_atanh.c: Include <float.h>.
	(__ieee754_atanh): Force underflow exception for results with
	small absolute value.
	* sysdeps/ieee754/flt-32/e_atanhf.c: Include <float.h>.
	(__ieee754_atanhf): Force underflow exception for results with
	small absolute value.
	* sysdeps/ieee754/ldbl-128/e_atanhl.c: Include <float.h>.
	(__ieee754_atanhl): Force underflow exception for results with
	small absolute value.
	* sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: Include <float.h>.
	(__ieee754_atanhl): Force underflow exception for results with
	small absolute value.
	* sysdeps/ieee754/ldbl-96/e_atanhl.c: Include <float.h>.
	(__ieee754_atanhl): Force underflow exception for results with
	small absolute value.
	* math/auto-libm-test-in: Do not allow missing underflow
	exceptions from atanh.
	* math/auto-libm-test-out: Regenerated.
This commit is contained in:
Joseph Myers 2015-05-15 22:07:57 +00:00
parent 5a608ccc2d
commit 8020a80887
11 changed files with 235 additions and 137 deletions

View File

@ -1,5 +1,31 @@
2015-05-15 Joseph Myers <joseph@codesourcery.com> 2015-05-15 Joseph Myers <joseph@codesourcery.com>
[BZ #16352]
* sysdeps/i386/fpu/e_atanh.S (dbl_min): New object.
(__ieee754_atanh): Force underflow exception for results with
small absolute value.
* sysdeps/i386/fpu/e_atanhf.S (flt_min): New object.
(__ieee754_atanhf): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/dbl-64/e_atanh.c: Include <float.h>.
(__ieee754_atanh): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/flt-32/e_atanhf.c: Include <float.h>.
(__ieee754_atanhf): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/ldbl-128/e_atanhl.c: Include <float.h>.
(__ieee754_atanhl): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: Include <float.h>.
(__ieee754_atanhl): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/ldbl-96/e_atanhl.c: Include <float.h>.
(__ieee754_atanhl): Force underflow exception for results with
small absolute value.
* math/auto-libm-test-in: Do not allow missing underflow
exceptions from atanh.
* math/auto-libm-test-out: Regenerated.
[BZ #18221] [BZ #18221]
* sysdeps/ieee754/flt-32/k_tanf.c (__kernel_tanf): Use 2**-13 not * sysdeps/ieee754/flt-32/k_tanf.c (__kernel_tanf): Use 2**-13 not
2**-28 as threshold for returning x or +/- 1/x. 2**-28 as threshold for returning x or +/- 1/x.

17
NEWS
View File

@ -10,14 +10,15 @@ Version 2.22
* The following bugs are resolved with this release: * The following bugs are resolved with this release:
4719, 6792, 13064, 14094, 14841, 14906, 15319, 15467, 15790, 15969, 16339, 4719, 6792, 13064, 14094, 14841, 14906, 15319, 15467, 15790, 15969, 16339,
16351, 16512, 16560, 16704, 16783, 16850, 17090, 17195, 17269, 17523, 16351, 16352, 16512, 16560, 16704, 16783, 16850, 17090, 17195, 17269,
17542, 17569, 17588, 17596, 17620, 17621, 17628, 17631, 17692, 17711, 17523, 17542, 17569, 17588, 17596, 17620, 17621, 17628, 17631, 17692,
17715, 17776, 17779, 17792, 17836, 17912, 17916, 17930, 17932, 17944, 17711, 17715, 17776, 17779, 17792, 17836, 17912, 17916, 17930, 17932,
17949, 17964, 17965, 17967, 17969, 17978, 17987, 17991, 17996, 17998, 17944, 17949, 17964, 17965, 17967, 17969, 17978, 17987, 17991, 17996,
17999, 18007, 18019, 18020, 18029, 18030, 18032, 18036, 18038, 18039, 17998, 17999, 18007, 18019, 18020, 18029, 18030, 18032, 18036, 18038,
18042, 18043, 18046, 18047, 18068, 18080, 18093, 18100, 18104, 18110, 18039, 18042, 18043, 18046, 18047, 18068, 18080, 18093, 18100, 18104,
18111, 18125, 18128, 18138, 18185, 18196, 18197, 18206, 18210, 18211, 18110, 18111, 18125, 18128, 18138, 18185, 18196, 18197, 18206, 18210,
18217, 18220, 18221, 18247, 18287, 18319, 18333, 18346, 18397, 18409. 18211, 18217, 18220, 18221, 18247, 18287, 18319, 18333, 18346, 18397,
18409.
* Cache information can be queried via sysconf() function on s390 e.g. with * Cache information can be queried via sysconf() function on s390 e.g. with
_SC_LEVEL1_ICACHE_SIZE as argument. _SC_LEVEL1_ICACHE_SIZE as argument.

View File

@ -382,13 +382,12 @@ atanh 0x3.91d9f3c80c72d7acp-4
atanh -0x2.6c52c26567198p-4 atanh -0x2.6c52c26567198p-4
atanh 0x3.a274ecp-4 atanh 0x3.a274ecp-4
atanh -0x3.f0f519a687b64p-8 atanh -0x3.f0f519a687b64p-8
# Bug 16352: underflow exception may be missing. atanh 0x1p-500
atanh 0x1p-500 missing-underflow atanh 0x1p-5000
atanh 0x1p-5000 missing-underflow atanh min
atanh min missing-underflow atanh -min
atanh -min missing-underflow atanh min_subnorm
atanh min_subnorm missing-underflow atanh -min_subnorm
atanh -min_subnorm missing-underflow
# cabs (x,y) == cabs (y,x). # cabs (x,y) == cabs (y,x).
cabs 0.75 12.390625 cabs 0.75 12.390625

View File

@ -20533,11 +20533,11 @@ atanh -0x3.f0f519a687b64p-8
= atanh tonearest ldbl-128ibm -0x3.f0f519a687b64p-8L : -0x3.f109829060504072b047c21906p-8L : inexact-ok = atanh tonearest ldbl-128ibm -0x3.f0f519a687b64p-8L : -0x3.f109829060504072b047c21906p-8L : inexact-ok
= atanh towardzero ldbl-128ibm -0x3.f0f519a687b64p-8L : -0x3.f109829060504072b047c21906p-8L : inexact-ok = atanh towardzero ldbl-128ibm -0x3.f0f519a687b64p-8L : -0x3.f109829060504072b047c21906p-8L : inexact-ok
= atanh upward ldbl-128ibm -0x3.f0f519a687b64p-8L : -0x3.f109829060504072b047c21906p-8L : inexact-ok = atanh upward ldbl-128ibm -0x3.f0f519a687b64p-8L : -0x3.f109829060504072b047c21906p-8L : inexact-ok
atanh 0x1p-500 missing-underflow atanh 0x1p-500
= atanh downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= atanh tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= atanh towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= atanh upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow errno-erange-ok
= atanh downward dbl-64 0x8p-152 : 0x8p-152 : inexact-ok = atanh downward dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
= atanh tonearest dbl-64 0x8p-152 : 0x8p-152 : inexact-ok = atanh tonearest dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
= atanh towardzero dbl-64 0x8p-152 : 0x8p-152 : inexact-ok = atanh towardzero dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
@ -20602,11 +20602,11 @@ atanh 0x1p-500 missing-underflow
= atanh tonearest ldbl-128ibm 0x1p-500L : 0x1p-500L : inexact-ok = atanh tonearest ldbl-128ibm 0x1p-500L : 0x1p-500L : inexact-ok
= atanh towardzero ldbl-128ibm 0x1p-500L : 0x1p-500L : inexact-ok = atanh towardzero ldbl-128ibm 0x1p-500L : 0x1p-500L : inexact-ok
= atanh upward ldbl-128ibm 0x1p-500L : 0x1.000000000000000000000000008p-500L : inexact-ok = atanh upward ldbl-128ibm 0x1p-500L : 0x1.000000000000000000000000008p-500L : inexact-ok
atanh 0x1p-5000 missing-underflow atanh 0x1p-5000
= atanh downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= atanh tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= atanh towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= atanh upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow errno-erange-ok
= atanh downward dbl-64 0x8p-152 : 0x8p-152 : inexact-ok = atanh downward dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
= atanh tonearest dbl-64 0x8p-152 : 0x8p-152 : inexact-ok = atanh tonearest dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
= atanh towardzero dbl-64 0x8p-152 : 0x8p-152 : inexact-ok = atanh towardzero dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
@ -20651,10 +20651,10 @@ atanh 0x1p-5000 missing-underflow
= atanh tonearest ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-ok = atanh tonearest ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-ok
= atanh towardzero ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-ok = atanh towardzero ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-ok
= atanh upward ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-ok = atanh upward ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-ok
= atanh downward dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= atanh tonearest dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= atanh towardzero dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= atanh upward dbl-64 0x4p-1076 : 0x8p-1076 : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward dbl-64 0x4p-1076 : 0x8p-1076 : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok = atanh downward ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
= atanh tonearest ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok = atanh tonearest ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
= atanh towardzero ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok = atanh towardzero ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
@ -20667,10 +20667,10 @@ atanh 0x1p-5000 missing-underflow
= atanh tonearest ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok = atanh tonearest ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok
= atanh towardzero ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok = atanh towardzero ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok
= atanh upward ldbl-128 0x4p-1076L : 0x4.0000000000000000000000000004p-1076L : inexact-ok = atanh upward ldbl-128 0x4p-1076L : 0x4.0000000000000000000000000004p-1076L : inexact-ok
= atanh downward ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-128ibm 0x4p-1076L : 0x8p-1076L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-128ibm 0x4p-1076L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-intel 0x1p-5000L : 0x1p-5000L : inexact-ok = atanh downward ldbl-96-intel 0x1p-5000L : 0x1p-5000L : inexact-ok
= atanh tonearest ldbl-96-intel 0x1p-5000L : 0x1p-5000L : inexact-ok = atanh tonearest ldbl-96-intel 0x1p-5000L : 0x1p-5000L : inexact-ok
= atanh towardzero ldbl-96-intel 0x1p-5000L : 0x1p-5000L : inexact-ok = atanh towardzero ldbl-96-intel 0x1p-5000L : 0x1p-5000L : inexact-ok
@ -20683,7 +20683,7 @@ atanh 0x1p-5000 missing-underflow
= atanh tonearest ldbl-128 0x1p-5000L : 0x1p-5000L : inexact-ok = atanh tonearest ldbl-128 0x1p-5000L : 0x1p-5000L : inexact-ok
= atanh towardzero ldbl-128 0x1p-5000L : 0x1p-5000L : inexact-ok = atanh towardzero ldbl-128 0x1p-5000L : 0x1p-5000L : inexact-ok
= atanh upward ldbl-128 0x1p-5000L : 0x1.0000000000000000000000000001p-5000L : inexact-ok = atanh upward ldbl-128 0x1p-5000L : 0x1.0000000000000000000000000001p-5000L : inexact-ok
atanh min missing-underflow atanh min
= atanh downward flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok = atanh downward flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok
= atanh tonearest flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok = atanh tonearest flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok
= atanh towardzero flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok = atanh towardzero flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok
@ -20724,10 +20724,10 @@ atanh min missing-underflow
= atanh tonearest ldbl-128 0x4p-1024L : 0x4p-1024L : inexact-ok = atanh tonearest ldbl-128 0x4p-1024L : 0x4p-1024L : inexact-ok
= atanh towardzero ldbl-128 0x4p-1024L : 0x4p-1024L : inexact-ok = atanh towardzero ldbl-128 0x4p-1024L : 0x4p-1024L : inexact-ok
= atanh upward ldbl-128 0x4p-1024L : 0x4.0000000000000000000000000004p-1024L : inexact-ok = atanh upward ldbl-128 0x4p-1024L : 0x4.0000000000000000000000000004p-1024L : inexact-ok
= atanh downward ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-128ibm 0x4p-1024L : 0x4.0000000000004p-1024L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-128ibm 0x4p-1024L : 0x4.0000000000004p-1024L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh downward ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh tonearest ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh tonearest ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh towardzero ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh towardzero ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
@ -20740,18 +20740,18 @@ atanh min missing-underflow
= atanh tonearest ldbl-128 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh tonearest ldbl-128 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh towardzero ldbl-128 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh towardzero ldbl-128 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh upward ldbl-128 0x4p-16384L : 0x4.0000000000000000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh upward ldbl-128 0x4p-16384L : 0x4.0000000000000000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh downward ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-96-intel 0x2p-16384L : 0x2.0000000000000008p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-96-intel 0x2p-16384L : 0x2.0000000000000008p-16384L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh downward ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh tonearest ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh tonearest ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh towardzero ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh towardzero ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh upward ldbl-96-m68k 0x2p-16384L : 0x2.0000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh upward ldbl-96-m68k 0x2p-16384L : 0x2.0000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh downward ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-128 0x2p-16384L : 0x2.0000000000000000000000000004p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-128 0x2p-16384L : 0x2.0000000000000000000000000004p-16384L : inexact-ok underflow errno-erange-ok
= atanh downward dbl-64 0x8p-972 : 0x8p-972 : inexact-ok = atanh downward dbl-64 0x8p-972 : 0x8p-972 : inexact-ok
= atanh tonearest dbl-64 0x8p-972 : 0x8p-972 : inexact-ok = atanh tonearest dbl-64 0x8p-972 : 0x8p-972 : inexact-ok
= atanh towardzero dbl-64 0x8p-972 : 0x8p-972 : inexact-ok = atanh towardzero dbl-64 0x8p-972 : 0x8p-972 : inexact-ok
@ -20772,7 +20772,7 @@ atanh min missing-underflow
= atanh tonearest ldbl-128ibm 0x8p-972L : 0x8p-972L : inexact-ok underflow-ok errno-erange-ok = atanh tonearest ldbl-128ibm 0x8p-972L : 0x8p-972L : inexact-ok underflow-ok errno-erange-ok
= atanh towardzero ldbl-128ibm 0x8p-972L : 0x8p-972L : inexact-ok underflow-ok errno-erange-ok = atanh towardzero ldbl-128ibm 0x8p-972L : 0x8p-972L : inexact-ok underflow-ok errno-erange-ok
= atanh upward ldbl-128ibm 0x8p-972L : 0x8.00000000000000000000000004p-972L : inexact-ok underflow-ok errno-erange-ok = atanh upward ldbl-128ibm 0x8p-972L : 0x8.00000000000000000000000004p-972L : inexact-ok underflow-ok errno-erange-ok
atanh -min missing-underflow atanh -min
= atanh downward flt-32 -0x4p-128f : -0x4.000008p-128f : inexact-ok underflow-ok errno-erange-ok = atanh downward flt-32 -0x4p-128f : -0x4.000008p-128f : inexact-ok underflow-ok errno-erange-ok
= atanh tonearest flt-32 -0x4p-128f : -0x4p-128f : inexact-ok underflow-ok errno-erange-ok = atanh tonearest flt-32 -0x4p-128f : -0x4p-128f : inexact-ok underflow-ok errno-erange-ok
= atanh towardzero flt-32 -0x4p-128f : -0x4p-128f : inexact-ok underflow-ok errno-erange-ok = atanh towardzero flt-32 -0x4p-128f : -0x4p-128f : inexact-ok underflow-ok errno-erange-ok
@ -20813,10 +20813,10 @@ atanh -min missing-underflow
= atanh tonearest ldbl-128 -0x4p-1024L : -0x4p-1024L : inexact-ok = atanh tonearest ldbl-128 -0x4p-1024L : -0x4p-1024L : inexact-ok
= atanh towardzero ldbl-128 -0x4p-1024L : -0x4p-1024L : inexact-ok = atanh towardzero ldbl-128 -0x4p-1024L : -0x4p-1024L : inexact-ok
= atanh upward ldbl-128 -0x4p-1024L : -0x4p-1024L : inexact-ok = atanh upward ldbl-128 -0x4p-1024L : -0x4p-1024L : inexact-ok
= atanh downward ldbl-128ibm -0x4p-1024L : -0x4.0000000000004p-1024L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-128ibm -0x4p-1024L : -0x4.0000000000004p-1024L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-intel -0x4p-16384L : -0x4.0000000000000008p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh downward ldbl-96-intel -0x4p-16384L : -0x4.0000000000000008p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh tonearest ldbl-96-intel -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh tonearest ldbl-96-intel -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh towardzero ldbl-96-intel -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh towardzero ldbl-96-intel -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
@ -20829,18 +20829,18 @@ atanh -min missing-underflow
= atanh tonearest ldbl-128 -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh tonearest ldbl-128 -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh towardzero ldbl-128 -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh towardzero ldbl-128 -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh upward ldbl-128 -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh upward ldbl-128 -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh downward ldbl-96-intel -0x2p-16384L : -0x2.0000000000000008p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-96-intel -0x2p-16384L : -0x2.0000000000000008p-16384L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-m68k -0x2p-16384L : -0x2.0000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh downward ldbl-96-m68k -0x2p-16384L : -0x2.0000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh tonearest ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh tonearest ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh towardzero ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh towardzero ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh upward ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok = atanh upward ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
= atanh downward ldbl-128 -0x2p-16384L : -0x2.0000000000000000000000000004p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-128 -0x2p-16384L : -0x2.0000000000000000000000000004p-16384L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
= atanh downward dbl-64 -0x8p-972 : -0x8.0000000000008p-972 : inexact-ok = atanh downward dbl-64 -0x8p-972 : -0x8.0000000000008p-972 : inexact-ok
= atanh tonearest dbl-64 -0x8p-972 : -0x8p-972 : inexact-ok = atanh tonearest dbl-64 -0x8p-972 : -0x8p-972 : inexact-ok
= atanh towardzero dbl-64 -0x8p-972 : -0x8p-972 : inexact-ok = atanh towardzero dbl-64 -0x8p-972 : -0x8p-972 : inexact-ok
@ -20861,11 +20861,11 @@ atanh -min missing-underflow
= atanh tonearest ldbl-128ibm -0x8p-972L : -0x8p-972L : inexact-ok underflow-ok errno-erange-ok = atanh tonearest ldbl-128ibm -0x8p-972L : -0x8p-972L : inexact-ok underflow-ok errno-erange-ok
= atanh towardzero ldbl-128ibm -0x8p-972L : -0x8p-972L : inexact-ok underflow-ok errno-erange-ok = atanh towardzero ldbl-128ibm -0x8p-972L : -0x8p-972L : inexact-ok underflow-ok errno-erange-ok
= atanh upward ldbl-128ibm -0x8p-972L : -0x8p-972L : inexact-ok underflow-ok errno-erange-ok = atanh upward ldbl-128ibm -0x8p-972L : -0x8p-972L : inexact-ok underflow-ok errno-erange-ok
atanh min_subnorm missing-underflow atanh min_subnorm
= atanh downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= atanh tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= atanh towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= atanh upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow errno-erange-ok
= atanh downward dbl-64 0x8p-152 : 0x8p-152 : inexact-ok = atanh downward dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
= atanh tonearest dbl-64 0x8p-152 : 0x8p-152 : inexact-ok = atanh tonearest dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
= atanh towardzero dbl-64 0x8p-152 : 0x8p-152 : inexact-ok = atanh towardzero dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
@ -20886,10 +20886,10 @@ atanh min_subnorm missing-underflow
= atanh tonearest ldbl-128ibm 0x8p-152L : 0x8p-152L : inexact-ok = atanh tonearest ldbl-128ibm 0x8p-152L : 0x8p-152L : inexact-ok
= atanh towardzero ldbl-128ibm 0x8p-152L : 0x8p-152L : inexact-ok = atanh towardzero ldbl-128ibm 0x8p-152L : 0x8p-152L : inexact-ok
= atanh upward ldbl-128ibm 0x8p-152L : 0x8.00000000000000000000000004p-152L : inexact-ok = atanh upward ldbl-128ibm 0x8p-152L : 0x8.00000000000000000000000004p-152L : inexact-ok
= atanh downward dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= atanh tonearest dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= atanh towardzero dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= atanh upward dbl-64 0x4p-1076 : 0x8p-1076 : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward dbl-64 0x4p-1076 : 0x8p-1076 : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok = atanh downward ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
= atanh tonearest ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok = atanh tonearest ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
= atanh towardzero ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok = atanh towardzero ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
@ -20902,39 +20902,39 @@ atanh min_subnorm missing-underflow
= atanh tonearest ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok = atanh tonearest ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok
= atanh towardzero ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok = atanh towardzero ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok
= atanh upward ldbl-128 0x4p-1076L : 0x4.0000000000000000000000000004p-1076L : inexact-ok = atanh upward ldbl-128 0x4p-1076L : 0x4.0000000000000000000000000004p-1076L : inexact-ok
= atanh downward ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-128ibm 0x4p-1076L : 0x8p-1076L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-128ibm 0x4p-1076L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-96-intel 0x8p-16448L : 0x1p-16444L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-96-intel 0x8p-16448L : 0x1p-16444L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-96-m68k 0x8p-16448L : 0xcp-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-96-m68k 0x8p-16448L : 0xcp-16448L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-128 0x8p-16448L : 0x8.000000000004p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-128 0x8p-16448L : 0x8.000000000004p-16448L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-96-m68k 0x4p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-96-m68k 0x4p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-128 0x4p-16448L : 0x4.000000000004p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-128 0x4p-16448L : 0x4.000000000004p-16448L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-128 0x4p-16496L : 0x8p-16496L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-128 0x4p-16496L : 0x8p-16496L : inexact-ok underflow errno-erange-ok
atanh -min_subnorm missing-underflow atanh -min_subnorm
= atanh downward flt-32 -0x8p-152f : -0x1p-148f : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward flt-32 -0x8p-152f : -0x1p-148f : inexact-ok underflow errno-erange-ok
= atanh tonearest flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow errno-erange-ok
= atanh towardzero flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow errno-erange-ok
= atanh upward flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow errno-erange-ok
= atanh downward dbl-64 -0x8p-152 : -0x8.0000000000008p-152 : inexact-ok = atanh downward dbl-64 -0x8p-152 : -0x8.0000000000008p-152 : inexact-ok
= atanh tonearest dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok = atanh tonearest dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok
= atanh towardzero dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok = atanh towardzero dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok
@ -20955,10 +20955,10 @@ atanh -min_subnorm missing-underflow
= atanh tonearest ldbl-128ibm -0x8p-152L : -0x8p-152L : inexact-ok = atanh tonearest ldbl-128ibm -0x8p-152L : -0x8p-152L : inexact-ok
= atanh towardzero ldbl-128ibm -0x8p-152L : -0x8p-152L : inexact-ok = atanh towardzero ldbl-128ibm -0x8p-152L : -0x8p-152L : inexact-ok
= atanh upward ldbl-128ibm -0x8p-152L : -0x8p-152L : inexact-ok = atanh upward ldbl-128ibm -0x8p-152L : -0x8p-152L : inexact-ok
= atanh downward dbl-64 -0x4p-1076 : -0x8p-1076 : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward dbl-64 -0x4p-1076 : -0x8p-1076 : inexact-ok underflow errno-erange-ok
= atanh tonearest dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow errno-erange-ok
= atanh towardzero dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow errno-erange-ok
= atanh upward dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-intel -0x4p-1076L : -0x4.0000000000000008p-1076L : inexact-ok = atanh downward ldbl-96-intel -0x4p-1076L : -0x4.0000000000000008p-1076L : inexact-ok
= atanh tonearest ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok = atanh tonearest ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok
= atanh towardzero ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok = atanh towardzero ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok
@ -20971,34 +20971,34 @@ atanh -min_subnorm missing-underflow
= atanh tonearest ldbl-128 -0x4p-1076L : -0x4p-1076L : inexact-ok = atanh tonearest ldbl-128 -0x4p-1076L : -0x4p-1076L : inexact-ok
= atanh towardzero ldbl-128 -0x4p-1076L : -0x4p-1076L : inexact-ok = atanh towardzero ldbl-128 -0x4p-1076L : -0x4p-1076L : inexact-ok
= atanh upward ldbl-128 -0x4p-1076L : -0x4p-1076L : inexact-ok = atanh upward ldbl-128 -0x4p-1076L : -0x4p-1076L : inexact-ok
= atanh downward ldbl-128ibm -0x4p-1076L : -0x8p-1076L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-128ibm -0x4p-1076L : -0x8p-1076L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-intel -0x8p-16448L : -0x1p-16444L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-96-intel -0x8p-16448L : -0x1p-16444L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-m68k -0x8p-16448L : -0xcp-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-96-m68k -0x8p-16448L : -0xcp-16448L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-128 -0x8p-16448L : -0x8.000000000004p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-128 -0x8p-16448L : -0x8.000000000004p-16448L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-96-m68k -0x4p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-96-m68k -0x4p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-128 -0x4p-16448L : -0x4.000000000004p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-128 -0x4p-16448L : -0x4.000000000004p-16448L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
= atanh downward ldbl-128 -0x4p-16496L : -0x8p-16496L : inexact-ok underflow underflow-ok errno-erange-ok = atanh downward ldbl-128 -0x4p-16496L : -0x8p-16496L : inexact-ok underflow errno-erange-ok
= atanh tonearest ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok = atanh tonearest ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow errno-erange-ok
= atanh towardzero ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok = atanh towardzero ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow errno-erange-ok
= atanh upward ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok = atanh upward ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow errno-erange-ok
cabs 0.75 12.390625 cabs 0.75 12.390625
= cabs downward flt-32 0xcp-4f 0xc.64p+0f : 0xc.69ce3p+0f : inexact-ok = cabs downward flt-32 0xcp-4f 0xc.64p+0f : 0xc.69ce3p+0f : inexact-ok
= cabs tonearest flt-32 0xcp-4f 0xc.64p+0f : 0xc.69ce3p+0f : inexact-ok = cabs tonearest flt-32 0xcp-4f 0xc.64p+0f : 0xc.69ce3p+0f : inexact-ok

View File

@ -35,6 +35,13 @@ limit: .double 0.29
ln2_2: .tfloat 0.3465735902799726547086160 ln2_2: .tfloat 0.3465735902799726547086160
ASM_SIZE_DIRECTIVE(ln2_2) ASM_SIZE_DIRECTIVE(ln2_2)
.section .rodata.cst8,"aM",@progbits,8
.p2align 3
.type dbl_min,@object
dbl_min: .byte 0, 0, 0, 0, 0, 0, 0x10, 0
ASM_SIZE_DIRECTIVE(dbl_min)
#ifdef PIC #ifdef PIC
#define MO(op) op##@GOTOFF(%edx) #define MO(op) op##@GOTOFF(%edx)
#else #else
@ -81,7 +88,18 @@ ENTRY(__ieee754_atanh)
sahf sahf
jae 4f jae 4f
fyl2xp1 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|)) fyl2xp1 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
jecxz 3f fcoml MO(dbl_min)
fnstsw
sahf
jae 8f
subl $8, %esp
cfi_adjust_cfa_offset (8)
fld %st(0)
fmul %st(0)
fstpl (%esp)
addl $8, %esp
cfi_adjust_cfa_offset (-8)
8: jecxz 3f
fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x)) fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
3: ret 3: ret

View File

@ -36,6 +36,13 @@ limit: .double 0.29
ln2_2: .tfloat 0.3465735902799726547086160 ln2_2: .tfloat 0.3465735902799726547086160
ASM_SIZE_DIRECTIVE(ln2_2) ASM_SIZE_DIRECTIVE(ln2_2)
.section .rodata.cst4,"aM",@progbits,4
.p2align 2
.type flt_min,@object
flt_min: .byte 0, 0, 0x80, 0
ASM_SIZE_DIRECTIVE(flt_min)
#ifdef PIC #ifdef PIC
#define MO(op) op##@GOTOFF(%edx) #define MO(op) op##@GOTOFF(%edx)
#else #else
@ -77,7 +84,18 @@ ENTRY(__ieee754_atanhf)
sahf sahf
jae 4f jae 4f
fyl2xp1 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|)) fyl2xp1 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
jecxz 3f fcoms MO(flt_min)
fnstsw
sahf
jae 6f
subl $4, %esp
cfi_adjust_cfa_offset (4)
fld %st(0)
fmul %st(0)
fstps (%esp)
addl $4, %esp
cfi_adjust_cfa_offset (-4)
6: jecxz 3f
fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x)) fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
3: ret 3: ret

View File

@ -35,6 +35,7 @@
*/ */
#include <float.h>
#include <inttypes.h> #include <inttypes.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
@ -51,6 +52,11 @@ __ieee754_atanh (double x)
if (__glibc_unlikely (xa < 0x1.0p-28)) if (__glibc_unlikely (xa < 0x1.0p-28))
{ {
math_force_eval (huge + x); math_force_eval (huge + x);
if (fabs (x) < DBL_MIN)
{
double force_underflow = x * x;
math_force_eval (force_underflow);
}
return x; return x;
} }

View File

@ -35,6 +35,7 @@
*/ */
#include <float.h>
#include <inttypes.h> #include <inttypes.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
@ -51,6 +52,11 @@ __ieee754_atanhf (float x)
if (__glibc_unlikely (xa < 0x1.0p-28f)) if (__glibc_unlikely (xa < 0x1.0p-28f))
{ {
math_force_eval (huge + x); math_force_eval (huge + x);
if (fabsf (x) < FLT_MIN)
{
float force_underflow = x * x;
math_force_eval (force_underflow);
}
return x; return x;
} }

View File

@ -32,6 +32,7 @@
* *
*/ */
#include <float.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
@ -57,7 +58,15 @@ __ieee754_atanhl(long double x)
else else
return (x-x)/(x-x); return (x-x)/(x-x);
} }
if(ix<0x3fc60000 && (huge+x)>zero) return x; /* x < 2^-57 */ if(ix<0x3fc60000 && (huge+x)>zero) /* x < 2^-57 */
{
if (fabsl (x) < LDBL_MIN)
{
long double force_underflow = x * x;
math_force_eval (force_underflow);
}
return x;
}
if(ix<0x3ffe0000) { /* x < 0.5 */ if(ix<0x3ffe0000) { /* x < 0.5 */
t = u.value+u.value; t = u.value+u.value;

View File

@ -28,6 +28,7 @@
* *
*/ */
#include <float.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
@ -54,7 +55,15 @@ __ieee754_atanhl(long double x)
if (t == one) if (t == one)
return x/zero; return x/zero;
} }
if(ix<0x3c70000000000000LL&&(huge+x)>zero) return x; /* x<2**-56 */ if(ix<0x3c70000000000000LL&&(huge+x)>zero) /* x<2**-56 */
{
if (fabsl (x) < LDBL_MIN)
{
long double force_underflow = x * x;
math_force_eval (force_underflow);
}
return x;
}
x = fabsl (x); x = fabsl (x);
if(ix<0x3fe0000000000000LL) { /* x < 0.5 */ if(ix<0x3fe0000000000000LL) { /* x < 0.5 */
t = x+x; t = x+x;

View File

@ -32,6 +32,7 @@
* *
*/ */
#include <float.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
@ -54,6 +55,11 @@ __ieee754_atanhl(long double x)
return x/zero; return x/zero;
if(ix<0x3fdf) { if(ix<0x3fdf) {
math_force_eval(huge+x); math_force_eval(huge+x);
if (fabsl (x) < LDBL_MIN)
{
long double force_underflow = x * x;
math_force_eval (force_underflow);
}
return x; /* x<2**-32 */ return x; /* x<2**-32 */
} }
SET_LDOUBLE_EXP(x,ix); SET_LDOUBLE_EXP(x,ix);