This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Add testcase for expl


On 02/06/2014 05:22 PM, Joseph S. Myers wrote:
On Thu, 6 Feb 2014, Stefan Liebler wrote:

Hi,

due to Bug 16447, the function __erfcl
in sysdeps/ieee754/ldbl-128/s_erfl.c
calls __ieee754_expl in sysdeps/ieee754/ldbl-128/e_expl.c.
The value returned by expl is a normalized value, but FE_UNDERFLOW is set on
S/390. Therefore the testcase shows the problem directly.

"Bug N" comments in auto-libm-test-in are present as justification for
xfail, missing-* or spurious-* annotations for tests (searching for "bug"
in the file shows exactly what's marked as expected to fail because of
known bugs).  Thus, if adding the test on its own (and normally the test
would be added by the same patch fixing the bug, rather than before the
fix), there should be a spurious-underflow:ldbl-128 annotation.


okay. Here is the testcase with the fix for expl (see Bug 16447).

But now the double test fails:

testing double (without inline functions)
Failure: Test: exp_upward (-0x2.c4edp+12)
Result:
 is:          0.00000000000000000000e+00   0x0.00000000000000000000p+0
 should be:   4.94065645841246544177e-324   0x0.00000000000010000000p-1022
 difference:  4.94065645841246544177e-324   0x0.00000000000010000000p-1022
 ulp       :  1.0000
 max.ulp   :  0.0000

The same thing for the inlined version.

In all rounding-modes, the exp-function returns zero and errno=ERANGE,FE_INEXACT and FE_UNDERFLOW are set.

---
2014-02-07  Stefan Liebler  <stli@linux.vnet.ibm.com>

    * math/auto-libm-test-in: Add testcase for expl
    * math/auto-libm-test-out: Likewise
    * sysdeps/ieee754/ldbl-128/e_expl.c: Fix calculation of unsafe
---

diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index b919dbc..c620361 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -725,6 +725,7 @@ exp max xfail-rounding:dbl-64 xfail-rounding:ldbl-128ibm
 exp -7.4444006192138124e+02
 exp -0x1.75f113c30b1c8p+9
 exp -max
+exp -11342.8125

 exp10 0
 exp10 -0
diff --git a/math/auto-libm-test-out b/math/auto-libm-test-out
index 8955e18..93818e8 100644
--- a/math/auto-libm-test-out
+++ b/math/auto-libm-test-out
@@ -62149,6 +62149,31 @@ exp -max
= exp tonearest ldbl-128ibm -0xf.ffffffffffffbffffffffffffcp+1020L : 0x0p+0L : inexact-ok underflow errno-erange = exp towardzero ldbl-128ibm -0xf.ffffffffffffbffffffffffffcp+1020L : 0x0p+0L : inexact-ok underflow errno-erange = exp upward ldbl-128ibm -0xf.ffffffffffffbffffffffffffcp+1020L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+exp -11342.8125
+= exp downward flt-32 -0x2.c4edp+12f : 0x0p+0f : inexact-ok underflow errno-erange += exp tonearest flt-32 -0x2.c4edp+12f : 0x0p+0f : inexact-ok underflow errno-erange += exp towardzero flt-32 -0x2.c4edp+12f : 0x0p+0f : inexact-ok underflow errno-erange += exp upward flt-32 -0x2.c4edp+12f : 0x8p-152f : inexact-ok underflow errno-erange-ok += exp downward dbl-64 -0x2.c4edp+12 : 0x0p+0 : inexact-ok underflow errno-erange += exp tonearest dbl-64 -0x2.c4edp+12 : 0x0p+0 : inexact-ok underflow errno-erange += exp towardzero dbl-64 -0x2.c4edp+12 : 0x0p+0 : inexact-ok underflow errno-erange += exp upward dbl-64 -0x2.c4edp+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok += exp downward ldbl-96-intel -0x2.c4edp+12L : 0xd.be48e2532594eccp-16368L : inexact-ok += exp tonearest ldbl-96-intel -0x2.c4edp+12L : 0xd.be48e2532594eccp-16368L : inexact-ok += exp towardzero ldbl-96-intel -0x2.c4edp+12L : 0xd.be48e2532594eccp-16368L : inexact-ok += exp upward ldbl-96-intel -0x2.c4edp+12L : 0xd.be48e2532594ecdp-16368L : inexact-ok += exp downward ldbl-96-m68k -0x2.c4edp+12L : 0xd.be48e2532594eccp-16368L : inexact-ok += exp tonearest ldbl-96-m68k -0x2.c4edp+12L : 0xd.be48e2532594eccp-16368L : inexact-ok += exp towardzero ldbl-96-m68k -0x2.c4edp+12L : 0xd.be48e2532594eccp-16368L : inexact-ok += exp upward ldbl-96-m68k -0x2.c4edp+12L : 0xd.be48e2532594ecdp-16368L : inexact-ok += exp downward ldbl-128 -0x2.c4edp+12L : 0xd.be48e2532594ecc1a3b8f7ce2038p-16368L : inexact-ok += exp tonearest ldbl-128 -0x2.c4edp+12L : 0xd.be48e2532594ecc1a3b8f7ce2038p-16368L : inexact-ok += exp towardzero ldbl-128 -0x2.c4edp+12L : 0xd.be48e2532594ecc1a3b8f7ce2038p-16368L : inexact-ok += exp upward ldbl-128 -0x2.c4edp+12L : 0xd.be48e2532594ecc1a3b8f7ce204p-16368L : inexact-ok += exp downward ldbl-128ibm -0x2.c4edp+12L : 0x0p+0L : inexact-ok underflow errno-erange += exp tonearest ldbl-128ibm -0x2.c4edp+12L : 0x0p+0L : inexact-ok underflow errno-erange += exp towardzero ldbl-128ibm -0x2.c4edp+12L : 0x0p+0L : inexact-ok underflow errno-erange += exp upward ldbl-128ibm -0x2.c4edp+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
 exp10 0
 = exp10 downward flt-32 0x0p+0f : 0x1p+0f : inexact-ok
 = exp10 tonearest flt-32 0x0p+0f : 0x1p+0f : inexact-ok
diff --git a/sysdeps/ieee754/ldbl-128/e_expl.c b/sysdeps/ieee754/ldbl-128/e_expl.c
index 8259758..ae2604e 100644
--- a/sysdeps/ieee754/ldbl-128/e_expl.c
+++ b/sysdeps/ieee754/ldbl-128/e_expl.c
@@ -181,7 +181,7 @@ __ieee754_expl (long double x)
 		* __expl_table[T_EXPL_RES2 + tval2];
       n_i = (int)n;
       /* 'unsafe' is 1 iff n_1 != 0.  */
-      unsafe = abs(n_i) >= -LDBL_MIN_EXP - 1;
+      unsafe = abs(n_i) >= 15000;
       ex2_u.ieee.exponent += n_i >> unsafe;

       /* Compute scale = 2^n_1.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]