]> sourceware.org Git - glibc.git/commitdiff
Fix i386 atanhl spurious underflows (bug 18049).
authorJoseph Myers <joseph@codesourcery.com>
Tue, 19 May 2015 23:05:22 +0000 (23:05 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 19 May 2015 23:05:22 +0000 (23:05 +0000)
The i386 implementation of atanhl, for small arguments, does a
calculation that involves computing twice the square of the argument,
resulting in spurious underflows for some arguments.  This patch fixes
this by just returning the argument when its exponent is below -32,
with underflow being forced as needed for subnormal arguments.

Tested for x86 and x86_64.

[BZ #18049]
* sysdeps/i386/fpu/e_atanhl.S (__ieee754_atanhl): For exponents
below -32, return the argument, with underflow if subnormal.
* math/auto-libm-test-in: Add more tests of atanh.
* math/auto-libm-test-out: Regenerated.

ChangeLog
NEWS
math/auto-libm-test-in
math/auto-libm-test-out
sysdeps/i386/fpu/e_atanhl.S

index 5ea3db5a2c89973750a663e02e9a674b5e44c1d0..0a5ef3b4a047ffaf69ec0a67ce6c2a73499e8c65 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2015-05-19  Joseph Myers  <joseph@codesourcery.com>
+
+       [BZ #18049]
+       * sysdeps/i386/fpu/e_atanhl.S (__ieee754_atanhl): For exponents
+       below -32, return the argument, with underflow if subnormal.
+       * math/auto-libm-test-in: Add more tests of atanh.
+       * math/auto-libm-test-out: Regenerated.
+
 2015-05-19  Roland McGrath  <roland@hack.frob.com>
 
        [BZ #18434]
diff --git a/NEWS b/NEWS
index 7d74b8e7b8e8ae7ef33b7f66a7190c294ad2efa6..c112b94ba3d0cef449582c4d5e556fa342bcf8fd 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -15,10 +15,10 @@ Version 2.22
   17631, 17692, 17711, 17715, 17776, 17779, 17792, 17836, 17912, 17916,
   17930, 17932, 17944, 17949, 17964, 17965, 17967, 17969, 17978, 17987,
   17991, 17996, 17998, 17999, 18007, 18019, 18020, 18029, 18030, 18032,
-  18036, 18038, 18039, 18042, 18043, 18046, 18047, 18068, 18080, 18093,
-  18100, 18104, 18110, 18111, 18125, 18128, 18138, 18185, 18196, 18197,
-  18206, 18210, 18211, 18217, 18220, 18221, 18247, 18287, 18319, 18333,
-  18346, 18397, 18409, 18418.
+  18036, 18038, 18039, 18042, 18043, 18046, 18047, 18049, 18068, 18080,
+  18093, 18100, 18104, 18110, 18111, 18125, 18128, 18138, 18185, 18196,
+  18197, 18206, 18210, 18211, 18217, 18220, 18221, 18247, 18287, 18319,
+  18333, 18346, 18397, 18409, 18418.
 
 * Cache information can be queried via sysconf() function on s390 e.g. with
   _SC_LEVEL1_ICACHE_SIZE as argument.
index 6fe0ed7d75763170bb3c990b2562c2ad73960306..9e55d913ae355ae3a01189406f6a3621263c4f92 100644 (file)
@@ -368,6 +368,11 @@ atanh 0x1p-57
 atanh 0x1p-58
 atanh 0x1p-59
 atanh 0x1p-100
+atanh -0x1p-100
+atanh 0x1p-600
+atanh -0x1p-600
+atanh 0x1p-10000
+atanh -0x1p-10000
 atanh -0x6.e6c77p-20
 atanh 0x3.2ca824p-4
 atanh -0x1.cc1d66p-4
index 8119f275d074ffb0c33af48a5b551e4e19db87c2..90ec0e585ade16c80556938f0950521fc393fd80 100644 (file)
@@ -19883,6 +19883,331 @@ atanh 0x1p-100
 = atanh tonearest ldbl-128ibm 0x1p-100L : 0x1p-100L : inexact-ok
 = atanh towardzero ldbl-128ibm 0x1p-100L : 0x1p-100L : inexact-ok
 = atanh upward ldbl-128ibm 0x1p-100L : 0x1.000000000000000000000000008p-100L : inexact-ok
+atanh -0x1p-100
+= atanh downward flt-32 -0x1p-100f : -0x1.000002p-100f : inexact-ok
+= atanh tonearest flt-32 -0x1p-100f : -0x1p-100f : inexact-ok
+= atanh towardzero flt-32 -0x1p-100f : -0x1p-100f : inexact-ok
+= atanh upward flt-32 -0x1p-100f : -0x1p-100f : inexact-ok
+= atanh downward dbl-64 -0x1p-100 : -0x1.0000000000001p-100 : inexact-ok
+= atanh tonearest dbl-64 -0x1p-100 : -0x1p-100 : inexact-ok
+= atanh towardzero dbl-64 -0x1p-100 : -0x1p-100 : inexact-ok
+= atanh upward dbl-64 -0x1p-100 : -0x1p-100 : inexact-ok
+= atanh downward ldbl-96-intel -0x1p-100L : -0x1.0000000000000002p-100L : inexact-ok
+= atanh tonearest ldbl-96-intel -0x1p-100L : -0x1p-100L : inexact-ok
+= atanh towardzero ldbl-96-intel -0x1p-100L : -0x1p-100L : inexact-ok
+= atanh upward ldbl-96-intel -0x1p-100L : -0x1p-100L : inexact-ok
+= atanh downward ldbl-96-m68k -0x1p-100L : -0x1.0000000000000002p-100L : inexact-ok
+= atanh tonearest ldbl-96-m68k -0x1p-100L : -0x1p-100L : inexact-ok
+= atanh towardzero ldbl-96-m68k -0x1p-100L : -0x1p-100L : inexact-ok
+= atanh upward ldbl-96-m68k -0x1p-100L : -0x1p-100L : inexact-ok
+= atanh downward ldbl-128 -0x1p-100L : -0x1.0000000000000000000000000001p-100L : inexact-ok
+= atanh tonearest ldbl-128 -0x1p-100L : -0x1p-100L : inexact-ok
+= atanh towardzero ldbl-128 -0x1p-100L : -0x1p-100L : inexact-ok
+= atanh upward ldbl-128 -0x1p-100L : -0x1p-100L : inexact-ok
+= atanh downward ldbl-128ibm -0x1p-100L : -0x1.000000000000000000000000008p-100L : inexact-ok
+= atanh tonearest ldbl-128ibm -0x1p-100L : -0x1p-100L : inexact-ok
+= atanh towardzero ldbl-128ibm -0x1p-100L : -0x1p-100L : inexact-ok
+= atanh upward ldbl-128ibm -0x1p-100L : -0x1p-100L : inexact-ok
+atanh 0x1p-600
+= 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 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 errno-erange-ok
+= atanh downward 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 upward dbl-64 0x8p-152 : 0x8.0000000000008p-152 : inexact-ok
+= atanh downward ldbl-96-intel 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh upward ldbl-96-intel 0x8p-152L : 0x8.000000000000001p-152L : inexact-ok
+= atanh downward ldbl-96-m68k 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh upward ldbl-96-m68k 0x8p-152L : 0x8.000000000000001p-152L : inexact-ok
+= atanh downward ldbl-128 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh tonearest ldbl-128 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh towardzero ldbl-128 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh upward ldbl-128 0x8p-152L : 0x8.0000000000000000000000000008p-152L : inexact-ok
+= atanh downward 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 upward ldbl-128ibm 0x8p-152L : 0x8.00000000000000000000000004p-152L : inexact-ok
+= atanh downward flt-32 0x0p+0f : 0x0p+0f : inexact-ok
+= atanh tonearest flt-32 0x0p+0f : 0x0p+0f : inexact-ok
+= atanh towardzero flt-32 0x0p+0f : 0x0p+0f : inexact-ok
+= atanh upward flt-32 0x0p+0f : 0x0p+0f : inexact-ok
+= atanh downward dbl-64 0x0p+0 : 0x0p+0 : inexact-ok
+= atanh tonearest dbl-64 0x0p+0 : 0x0p+0 : inexact-ok
+= atanh towardzero dbl-64 0x0p+0 : 0x0p+0 : inexact-ok
+= atanh upward dbl-64 0x0p+0 : 0x0p+0 : inexact-ok
+= atanh downward ldbl-96-intel 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh upward ldbl-96-intel 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh downward ldbl-96-m68k 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh upward ldbl-96-m68k 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh downward ldbl-128 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh tonearest ldbl-128 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh towardzero ldbl-128 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh upward ldbl-128 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh downward 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 upward ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh downward dbl-64 0x1p-600 : 0x1p-600 : inexact-ok
+= atanh tonearest dbl-64 0x1p-600 : 0x1p-600 : inexact-ok
+= atanh towardzero dbl-64 0x1p-600 : 0x1p-600 : inexact-ok
+= atanh upward dbl-64 0x1p-600 : 0x1.0000000000001p-600 : inexact-ok
+= atanh downward ldbl-96-intel 0x1p-600L : 0x1p-600L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x1p-600L : 0x1p-600L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x1p-600L : 0x1p-600L : inexact-ok
+= atanh upward ldbl-96-intel 0x1p-600L : 0x1.0000000000000002p-600L : inexact-ok
+= atanh downward ldbl-96-m68k 0x1p-600L : 0x1p-600L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x1p-600L : 0x1p-600L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x1p-600L : 0x1p-600L : inexact-ok
+= atanh upward ldbl-96-m68k 0x1p-600L : 0x1.0000000000000002p-600L : inexact-ok
+= atanh downward ldbl-128 0x1p-600L : 0x1p-600L : inexact-ok
+= atanh tonearest ldbl-128 0x1p-600L : 0x1p-600L : inexact-ok
+= atanh towardzero ldbl-128 0x1p-600L : 0x1p-600L : inexact-ok
+= atanh upward ldbl-128 0x1p-600L : 0x1.0000000000000000000000000001p-600L : inexact-ok
+= atanh downward ldbl-128ibm 0x1p-600L : 0x1p-600L : inexact-ok
+= atanh tonearest ldbl-128ibm 0x1p-600L : 0x1p-600L : inexact-ok
+= atanh towardzero ldbl-128ibm 0x1p-600L : 0x1p-600L : inexact-ok
+= atanh upward ldbl-128ibm 0x1p-600L : 0x1.000000000000000000000000008p-600L : inexact-ok
+atanh -0x1p-600
+= atanh downward flt-32 -0x0p+0f : -0x0p+0f : inexact-ok
+= atanh tonearest flt-32 -0x0p+0f : -0x0p+0f : inexact-ok
+= atanh towardzero flt-32 -0x0p+0f : -0x0p+0f : inexact-ok
+= atanh upward flt-32 -0x0p+0f : -0x0p+0f : inexact-ok
+= atanh downward dbl-64 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanh tonearest dbl-64 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanh towardzero dbl-64 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanh upward dbl-64 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanh downward ldbl-96-intel -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh tonearest ldbl-96-intel -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh towardzero ldbl-96-intel -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh upward ldbl-96-intel -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh downward ldbl-96-m68k -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh tonearest ldbl-96-m68k -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh towardzero ldbl-96-m68k -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh upward ldbl-96-m68k -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh downward ldbl-128 -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh tonearest ldbl-128 -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh towardzero ldbl-128 -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh upward ldbl-128 -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh downward 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 upward ldbl-128ibm -0x0p+0L : -0x0p+0L : inexact-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 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 errno-erange-ok
+= atanh downward dbl-64 -0x8p-152 : -0x8.0000000000008p-152 : inexact-ok
+= atanh tonearest dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok
+= atanh towardzero dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok
+= atanh upward dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok
+= atanh downward ldbl-96-intel -0x8p-152L : -0x8.000000000000001p-152L : inexact-ok
+= atanh tonearest ldbl-96-intel -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh towardzero ldbl-96-intel -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh upward ldbl-96-intel -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh downward ldbl-96-m68k -0x8p-152L : -0x8.000000000000001p-152L : inexact-ok
+= atanh tonearest ldbl-96-m68k -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh towardzero ldbl-96-m68k -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh upward ldbl-96-m68k -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh downward ldbl-128 -0x8p-152L : -0x8.0000000000000000000000000008p-152L : inexact-ok
+= atanh tonearest ldbl-128 -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh towardzero ldbl-128 -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh upward ldbl-128 -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh downward ldbl-128ibm -0x8p-152L : -0x8.00000000000000000000000004p-152L : inexact-ok
+= atanh tonearest 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 downward dbl-64 -0x1p-600 : -0x1.0000000000001p-600 : inexact-ok
+= atanh tonearest dbl-64 -0x1p-600 : -0x1p-600 : inexact-ok
+= atanh towardzero dbl-64 -0x1p-600 : -0x1p-600 : inexact-ok
+= atanh upward dbl-64 -0x1p-600 : -0x1p-600 : inexact-ok
+= atanh downward ldbl-96-intel -0x1p-600L : -0x1.0000000000000002p-600L : inexact-ok
+= atanh tonearest ldbl-96-intel -0x1p-600L : -0x1p-600L : inexact-ok
+= atanh towardzero ldbl-96-intel -0x1p-600L : -0x1p-600L : inexact-ok
+= atanh upward ldbl-96-intel -0x1p-600L : -0x1p-600L : inexact-ok
+= atanh downward ldbl-96-m68k -0x1p-600L : -0x1.0000000000000002p-600L : inexact-ok
+= atanh tonearest ldbl-96-m68k -0x1p-600L : -0x1p-600L : inexact-ok
+= atanh towardzero ldbl-96-m68k -0x1p-600L : -0x1p-600L : inexact-ok
+= atanh upward ldbl-96-m68k -0x1p-600L : -0x1p-600L : inexact-ok
+= atanh downward ldbl-128 -0x1p-600L : -0x1.0000000000000000000000000001p-600L : inexact-ok
+= atanh tonearest ldbl-128 -0x1p-600L : -0x1p-600L : inexact-ok
+= atanh towardzero ldbl-128 -0x1p-600L : -0x1p-600L : inexact-ok
+= atanh upward ldbl-128 -0x1p-600L : -0x1p-600L : inexact-ok
+= atanh downward ldbl-128ibm -0x1p-600L : -0x1.000000000000000000000000008p-600L : inexact-ok
+= atanh tonearest ldbl-128ibm -0x1p-600L : -0x1p-600L : inexact-ok
+= atanh towardzero ldbl-128ibm -0x1p-600L : -0x1p-600L : inexact-ok
+= atanh upward ldbl-128ibm -0x1p-600L : -0x1p-600L : inexact-ok
+atanh 0x1p-10000
+= 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 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 errno-erange-ok
+= atanh downward 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 upward dbl-64 0x8p-152 : 0x8.0000000000008p-152 : inexact-ok
+= atanh downward ldbl-96-intel 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh upward ldbl-96-intel 0x8p-152L : 0x8.000000000000001p-152L : inexact-ok
+= atanh downward ldbl-96-m68k 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh upward ldbl-96-m68k 0x8p-152L : 0x8.000000000000001p-152L : inexact-ok
+= atanh downward ldbl-128 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh tonearest ldbl-128 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh towardzero ldbl-128 0x8p-152L : 0x8p-152L : inexact-ok
+= atanh upward ldbl-128 0x8p-152L : 0x8.0000000000000000000000000008p-152L : inexact-ok
+= atanh downward 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 upward ldbl-128ibm 0x8p-152L : 0x8.00000000000000000000000004p-152L : inexact-ok
+= atanh downward flt-32 0x0p+0f : 0x0p+0f : inexact-ok
+= atanh tonearest flt-32 0x0p+0f : 0x0p+0f : inexact-ok
+= atanh towardzero flt-32 0x0p+0f : 0x0p+0f : inexact-ok
+= atanh upward flt-32 0x0p+0f : 0x0p+0f : inexact-ok
+= atanh downward dbl-64 0x0p+0 : 0x0p+0 : inexact-ok
+= atanh tonearest dbl-64 0x0p+0 : 0x0p+0 : inexact-ok
+= atanh towardzero dbl-64 0x0p+0 : 0x0p+0 : inexact-ok
+= atanh upward dbl-64 0x0p+0 : 0x0p+0 : inexact-ok
+= atanh downward ldbl-96-intel 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh upward ldbl-96-intel 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh downward ldbl-96-m68k 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh upward ldbl-96-m68k 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh downward ldbl-128 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh tonearest ldbl-128 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh towardzero ldbl-128 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh upward ldbl-128 0x0p+0L : 0x0p+0L : inexact-ok
+= atanh downward 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 upward ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-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 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 errno-erange-ok
+= atanh downward 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 upward ldbl-96-intel 0x4p-1076L : 0x4.0000000000000008p-1076L : inexact-ok
+= atanh downward ldbl-96-m68k 0x4p-1076L : 0x4p-1076L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x4p-1076L : 0x4p-1076L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x4p-1076L : 0x4p-1076L : inexact-ok
+= atanh upward ldbl-96-m68k 0x4p-1076L : 0x4.0000000000000008p-1076L : inexact-ok
+= atanh downward 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 upward ldbl-128 0x4p-1076L : 0x4.0000000000000000000000000004p-1076L : inexact-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 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 errno-erange-ok
+= atanh downward ldbl-96-intel 0x1p-10000L : 0x1p-10000L : inexact-ok
+= atanh tonearest ldbl-96-intel 0x1p-10000L : 0x1p-10000L : inexact-ok
+= atanh towardzero ldbl-96-intel 0x1p-10000L : 0x1p-10000L : inexact-ok
+= atanh upward ldbl-96-intel 0x1p-10000L : 0x1.0000000000000002p-10000L : inexact-ok
+= atanh downward ldbl-96-m68k 0x1p-10000L : 0x1p-10000L : inexact-ok
+= atanh tonearest ldbl-96-m68k 0x1p-10000L : 0x1p-10000L : inexact-ok
+= atanh towardzero ldbl-96-m68k 0x1p-10000L : 0x1p-10000L : inexact-ok
+= atanh upward ldbl-96-m68k 0x1p-10000L : 0x1.0000000000000002p-10000L : inexact-ok
+= atanh downward ldbl-128 0x1p-10000L : 0x1p-10000L : inexact-ok
+= atanh tonearest ldbl-128 0x1p-10000L : 0x1p-10000L : inexact-ok
+= atanh towardzero ldbl-128 0x1p-10000L : 0x1p-10000L : inexact-ok
+= atanh upward ldbl-128 0x1p-10000L : 0x1.0000000000000000000000000001p-10000L : inexact-ok
+atanh -0x1p-10000
+= atanh downward flt-32 -0x0p+0f : -0x0p+0f : inexact-ok
+= atanh tonearest flt-32 -0x0p+0f : -0x0p+0f : inexact-ok
+= atanh towardzero flt-32 -0x0p+0f : -0x0p+0f : inexact-ok
+= atanh upward flt-32 -0x0p+0f : -0x0p+0f : inexact-ok
+= atanh downward dbl-64 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanh tonearest dbl-64 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanh towardzero dbl-64 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanh upward dbl-64 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanh downward ldbl-96-intel -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh tonearest ldbl-96-intel -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh towardzero ldbl-96-intel -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh upward ldbl-96-intel -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh downward ldbl-96-m68k -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh tonearest ldbl-96-m68k -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh towardzero ldbl-96-m68k -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh upward ldbl-96-m68k -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh downward ldbl-128 -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh tonearest ldbl-128 -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh towardzero ldbl-128 -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh upward ldbl-128 -0x0p+0L : -0x0p+0L : inexact-ok
+= atanh downward 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 upward ldbl-128ibm -0x0p+0L : -0x0p+0L : inexact-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 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 errno-erange-ok
+= atanh downward dbl-64 -0x8p-152 : -0x8.0000000000008p-152 : inexact-ok
+= atanh tonearest dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok
+= atanh towardzero dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok
+= atanh upward dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok
+= atanh downward ldbl-96-intel -0x8p-152L : -0x8.000000000000001p-152L : inexact-ok
+= atanh tonearest ldbl-96-intel -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh towardzero ldbl-96-intel -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh upward ldbl-96-intel -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh downward ldbl-96-m68k -0x8p-152L : -0x8.000000000000001p-152L : inexact-ok
+= atanh tonearest ldbl-96-m68k -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh towardzero ldbl-96-m68k -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh upward ldbl-96-m68k -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh downward ldbl-128 -0x8p-152L : -0x8.0000000000000000000000000008p-152L : inexact-ok
+= atanh tonearest ldbl-128 -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh towardzero ldbl-128 -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh upward ldbl-128 -0x8p-152L : -0x8p-152L : inexact-ok
+= atanh downward ldbl-128ibm -0x8p-152L : -0x8.00000000000000000000000004p-152L : inexact-ok
+= atanh tonearest 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 downward dbl-64 -0x4p-1076 : -0x8p-1076 : inexact-ok underflow 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 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 tonearest ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok
+= atanh towardzero ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok
+= atanh upward ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok
+= atanh downward ldbl-96-m68k -0x4p-1076L : -0x4.0000000000000008p-1076L : inexact-ok
+= atanh tonearest ldbl-96-m68k -0x4p-1076L : -0x4p-1076L : inexact-ok
+= atanh towardzero ldbl-96-m68k -0x4p-1076L : -0x4p-1076L : inexact-ok
+= atanh upward ldbl-96-m68k -0x4p-1076L : -0x4p-1076L : inexact-ok
+= atanh downward ldbl-128 -0x4p-1076L : -0x4.0000000000000000000000000004p-1076L : inexact-ok
+= atanh tonearest 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 downward ldbl-128ibm -0x4p-1076L : -0x8p-1076L : inexact-ok underflow 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 errno-erange-ok
+= atanh upward ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow errno-erange-ok
+= atanh downward ldbl-96-intel -0x1p-10000L : -0x1.0000000000000002p-10000L : inexact-ok
+= atanh tonearest ldbl-96-intel -0x1p-10000L : -0x1p-10000L : inexact-ok
+= atanh towardzero ldbl-96-intel -0x1p-10000L : -0x1p-10000L : inexact-ok
+= atanh upward ldbl-96-intel -0x1p-10000L : -0x1p-10000L : inexact-ok
+= atanh downward ldbl-96-m68k -0x1p-10000L : -0x1.0000000000000002p-10000L : inexact-ok
+= atanh tonearest ldbl-96-m68k -0x1p-10000L : -0x1p-10000L : inexact-ok
+= atanh towardzero ldbl-96-m68k -0x1p-10000L : -0x1p-10000L : inexact-ok
+= atanh upward ldbl-96-m68k -0x1p-10000L : -0x1p-10000L : inexact-ok
+= atanh downward ldbl-128 -0x1p-10000L : -0x1.0000000000000000000000000001p-10000L : inexact-ok
+= atanh tonearest ldbl-128 -0x1p-10000L : -0x1p-10000L : inexact-ok
+= atanh towardzero ldbl-128 -0x1p-10000L : -0x1p-10000L : inexact-ok
+= atanh upward ldbl-128 -0x1p-10000L : -0x1p-10000L : inexact-ok
 atanh -0x6.e6c77p-20
 = atanh downward flt-32 -0x6.e6c77p-20f : -0x6.e6c778p-20f : inexact-ok
 = atanh tonearest flt-32 -0x6.e6c77p-20f : -0x6.e6c77p-20f : inexact-ok
index 88a970378d8ffd4da50c63212e3c6b48699b81f0..1ad68510580d8174fc8a5096e22ef1e488c47b1b 100644 (file)
@@ -56,6 +56,16 @@ ENTRY(__ieee754_atanhl)
        andl    $0x7fff, %eax
        cmpl    $0x7fff, %eax
        je      5f
+       cmpl    $0x3fdf, %eax
+       jge     7f
+       // Exponent below -32; return x, with underflow if subnormal.
+       fldt    4(%esp)
+       cmpl    $0, %eax
+       jne     8f
+       fld     %st(0)
+       fmul    %st(0)
+       fstp    %st(0)
+8:     ret
 7:
 
 #ifdef PIC
This page took 0.599519 seconds and 5 git commands to generate.