Fix exp missing underflows (bug 15268, bug 15425).

This commit is contained in:
Joseph Myers 2013-12-03 21:49:56 +00:00
parent 17dea1887f
commit 749008ff03
7 changed files with 334 additions and 13 deletions

View File

@ -1,5 +1,15 @@
2013-12-03 Joseph Myers <joseph@codesourcery.com>
[BZ #15268]
[BZ #15425]
* sysdeps/ieee754/dbl-64/e_exp.c: Include <float.h>.
(__ieee754_exp): For possibly underflowing results, check size of
result and force underflow exception if required.
* math/auto-libm-test-in: Add more tests of exp.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
[BZ #16283]
* math/w_exp2.c (__exp2): Handle a zero result as underflow.
* math/w_exp2f.c (__exp2f): Likewise.

20
NEWS
View File

@ -11,16 +11,16 @@ Version 2.19
156, 387, 431, 832, 2801, 6786, 6787, 7003, 9954, 10253, 10278, 11087,
11157, 11214, 13028, 13982, 13985, 14029, 14032, 14143, 14155, 14547,
14699, 14752, 14876, 14910, 15004, 15048, 15218, 15277, 15308, 15362,
15374, 15400, 15427, 15483, 15522, 15531, 15532, 15601, 15608, 15609,
15610, 15632, 15640, 15670, 15672, 15680, 15681, 15723, 15734, 15735,
15736, 15748, 15749, 15754, 15760, 15763, 15764, 15797, 15799, 15825,
15844, 15847, 15849, 15855, 15856, 15857, 15859, 15867, 15886, 15887,
15890, 15892, 15893, 15895, 15897, 15905, 15909, 15917, 15919, 15921,
15923, 15939, 15948, 15963, 15966, 15985, 15988, 15997, 16032, 16034,
16036, 16037, 16041, 16055, 16071, 16072, 16074, 16077, 16078, 16103,
16112, 16143, 16144, 16146, 16150, 16151, 16153, 16167, 16172, 16195,
16214, 16245, 16271, 16283, 16289.
14699, 14752, 14876, 14910, 15004, 15048, 15218, 15268, 15277, 15308,
15362, 15374, 15400, 15425, 15427, 15483, 15522, 15531, 15532, 15601,
15608, 15609, 15610, 15632, 15640, 15670, 15672, 15680, 15681, 15723,
15734, 15735, 15736, 15748, 15749, 15754, 15760, 15763, 15764, 15797,
15799, 15825, 15844, 15847, 15849, 15855, 15856, 15857, 15859, 15867,
15886, 15887, 15890, 15892, 15893, 15895, 15897, 15905, 15909, 15917,
15919, 15921, 15923, 15939, 15948, 15963, 15966, 15985, 15988, 15997,
16032, 16034, 16036, 16037, 16041, 16055, 16071, 16072, 16074, 16077,
16078, 16103, 16112, 16143, 16144, 16146, 16150, 16151, 16153, 16167,
16172, 16195, 16214, 16245, 16271, 16283, 16289.
* The public headers no longer use __unused nor __block. This change is to
support compiling programs that are derived from BSD sources and use

View File

@ -178,6 +178,8 @@ exp -1234
# Bug 16284: results on directed rounding may be incorrect.
exp 1e5 xfail-rounding:dbl-64
exp max xfail-rounding:dbl-64
exp -7.4444006192138124e+02
exp -0x1.75f113c30b1c8p+9
exp -max
exp10 0

View File

@ -6018,6 +6018,220 @@ exp max xfail-rounding:dbl-64
= exp tonearest ldbl-128ibm 0xf.ffffffffffffbffffffffffffcp+1020L : plus_infty : inexact-ok overflow errno-erange
= exp towardzero ldbl-128ibm 0xf.ffffffffffffbffffffffffffcp+1020L : 0xf.ffffffffffffbffffffffffffcp+1020L : xfail:dbl-64 inexact-ok overflow errno-erange-ok
= exp upward ldbl-128ibm 0xf.ffffffffffffbffffffffffffcp+1020L : plus_infty : xfail:dbl-64 inexact-ok overflow errno-erange
exp -7.4444006192138124e+02
= exp downward flt-32 -0x2.e870a4p+8f : 0x0p+0f : inexact-ok underflow errno-erange
= exp tonearest flt-32 -0x2.e870a4p+8f : 0x0p+0f : inexact-ok underflow errno-erange
= exp towardzero flt-32 -0x2.e870a4p+8f : 0x0p+0f : inexact-ok underflow errno-erange
= exp upward flt-32 -0x2.e870a4p+8f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= exp downward dbl-64 -0x2.e870a4p+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp tonearest dbl-64 -0x2.e870a4p+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp towardzero dbl-64 -0x2.e870a4p+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp upward dbl-64 -0x2.e870a4p+8 : 0x8p-1076 : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.e870a4p+8L : 0x4.001236e259a703f8p-1076L : inexact-ok
= exp tonearest ldbl-96-intel -0x2.e870a4p+8L : 0x4.001236e259a704p-1076L : inexact-ok
= exp towardzero ldbl-96-intel -0x2.e870a4p+8L : 0x4.001236e259a703f8p-1076L : inexact-ok
= exp upward ldbl-96-intel -0x2.e870a4p+8L : 0x4.001236e259a704p-1076L : inexact-ok
= exp downward ldbl-96-m68k -0x2.e870a4p+8L : 0x4.001236e259a703f8p-1076L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.e870a4p+8L : 0x4.001236e259a704p-1076L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.e870a4p+8L : 0x4.001236e259a703f8p-1076L : inexact-ok
= exp upward ldbl-96-m68k -0x2.e870a4p+8L : 0x4.001236e259a704p-1076L : inexact-ok
= exp downward ldbl-128 -0x2.e870a4p+8L : 0x4.001236e259a703fe35e4572c21b4p-1076L : inexact-ok
= exp tonearest ldbl-128 -0x2.e870a4p+8L : 0x4.001236e259a703fe35e4572c21b8p-1076L : inexact-ok
= exp towardzero ldbl-128 -0x2.e870a4p+8L : 0x4.001236e259a703fe35e4572c21b4p-1076L : inexact-ok
= exp upward ldbl-128 -0x2.e870a4p+8L : 0x4.001236e259a703fe35e4572c21b8p-1076L : inexact-ok
= exp downward ldbl-128ibm -0x2.e870a4p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-128ibm -0x2.e870a4p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-128ibm -0x2.e870a4p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-128ibm -0x2.e870a4p+8L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
= exp downward flt-32 -0x2.e870a8p+8f : 0x0p+0f : inexact-ok underflow errno-erange
= exp tonearest flt-32 -0x2.e870a8p+8f : 0x0p+0f : inexact-ok underflow errno-erange
= exp towardzero flt-32 -0x2.e870a8p+8f : 0x0p+0f : inexact-ok underflow errno-erange
= exp upward flt-32 -0x2.e870a8p+8f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= exp downward dbl-64 -0x2.e870a8p+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp tonearest dbl-64 -0x2.e870a8p+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp towardzero dbl-64 -0x2.e870a8p+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp upward dbl-64 -0x2.e870a8p+8 : 0x8p-1076 : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.e870a8p+8L : 0x4.000236b97e84a93p-1076L : inexact-ok
= exp tonearest ldbl-96-intel -0x2.e870a8p+8L : 0x4.000236b97e84a93p-1076L : inexact-ok
= exp towardzero ldbl-96-intel -0x2.e870a8p+8L : 0x4.000236b97e84a93p-1076L : inexact-ok
= exp upward ldbl-96-intel -0x2.e870a8p+8L : 0x4.000236b97e84a938p-1076L : inexact-ok
= exp downward ldbl-96-m68k -0x2.e870a8p+8L : 0x4.000236b97e84a93p-1076L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.e870a8p+8L : 0x4.000236b97e84a93p-1076L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.e870a8p+8L : 0x4.000236b97e84a93p-1076L : inexact-ok
= exp upward ldbl-96-m68k -0x2.e870a8p+8L : 0x4.000236b97e84a938p-1076L : inexact-ok
= exp downward ldbl-128 -0x2.e870a8p+8L : 0x4.000236b97e84a932aa555f5e8ce4p-1076L : inexact-ok
= exp tonearest ldbl-128 -0x2.e870a8p+8L : 0x4.000236b97e84a932aa555f5e8ce4p-1076L : inexact-ok
= exp towardzero ldbl-128 -0x2.e870a8p+8L : 0x4.000236b97e84a932aa555f5e8ce4p-1076L : inexact-ok
= exp upward ldbl-128 -0x2.e870a8p+8L : 0x4.000236b97e84a932aa555f5e8ce8p-1076L : inexact-ok
= exp downward ldbl-128ibm -0x2.e870a8p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-128ibm -0x2.e870a8p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-128ibm -0x2.e870a8p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-128ibm -0x2.e870a8p+8L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
= exp downward dbl-64 -0x2.e870a7e5e88cp+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp tonearest dbl-64 -0x2.e870a7e5e88cp+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp towardzero dbl-64 -0x2.e870a7e5e88cp+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp upward dbl-64 -0x2.e870a7e5e88cp+8 : 0x8p-1076 : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.e870a7e5e88cp+8L : 0x4.00029f178d98fa08p-1076L : inexact-ok
= exp tonearest ldbl-96-intel -0x2.e870a7e5e88cp+8L : 0x4.00029f178d98fa1p-1076L : inexact-ok
= exp towardzero ldbl-96-intel -0x2.e870a7e5e88cp+8L : 0x4.00029f178d98fa08p-1076L : inexact-ok
= exp upward ldbl-96-intel -0x2.e870a7e5e88cp+8L : 0x4.00029f178d98fa1p-1076L : inexact-ok
= exp downward ldbl-96-m68k -0x2.e870a7e5e88cp+8L : 0x4.00029f178d98fa08p-1076L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.e870a7e5e88cp+8L : 0x4.00029f178d98fa1p-1076L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.e870a7e5e88cp+8L : 0x4.00029f178d98fa08p-1076L : inexact-ok
= exp upward ldbl-96-m68k -0x2.e870a7e5e88cp+8L : 0x4.00029f178d98fa1p-1076L : inexact-ok
= exp downward ldbl-128 -0x2.e870a7e5e88cp+8L : 0x4.00029f178d98fa0e72d456f74c24p-1076L : inexact-ok
= exp tonearest ldbl-128 -0x2.e870a7e5e88cp+8L : 0x4.00029f178d98fa0e72d456f74c28p-1076L : inexact-ok
= exp towardzero ldbl-128 -0x2.e870a7e5e88cp+8L : 0x4.00029f178d98fa0e72d456f74c24p-1076L : inexact-ok
= exp upward ldbl-128 -0x2.e870a7e5e88cp+8L : 0x4.00029f178d98fa0e72d456f74c28p-1076L : inexact-ok
= exp downward ldbl-128ibm -0x2.e870a7e5e88cp+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-128ibm -0x2.e870a7e5e88cp+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-128ibm -0x2.e870a7e5e88cp+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-128ibm -0x2.e870a7e5e88cp+8L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
= exp downward dbl-64 -0x2.e870a7e5e88c2p+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp tonearest dbl-64 -0x2.e870a7e5e88c2p+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp towardzero dbl-64 -0x2.e870a7e5e88c2p+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp upward dbl-64 -0x2.e870a7e5e88c2p+8 : 0x8p-1076 : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.e870a7e5e88c2p+8L : 0x4.00029f178d18f9b8p-1076L : inexact-ok
= exp tonearest ldbl-96-intel -0x2.e870a7e5e88c2p+8L : 0x4.00029f178d18f9b8p-1076L : inexact-ok
= exp towardzero ldbl-96-intel -0x2.e870a7e5e88c2p+8L : 0x4.00029f178d18f9b8p-1076L : inexact-ok
= exp upward ldbl-96-intel -0x2.e870a7e5e88c2p+8L : 0x4.00029f178d18f9cp-1076L : inexact-ok
= exp downward ldbl-96-m68k -0x2.e870a7e5e88c2p+8L : 0x4.00029f178d18f9b8p-1076L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.e870a7e5e88c2p+8L : 0x4.00029f178d18f9b8p-1076L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.e870a7e5e88c2p+8L : 0x4.00029f178d18f9b8p-1076L : inexact-ok
= exp upward ldbl-96-m68k -0x2.e870a7e5e88c2p+8L : 0x4.00029f178d18f9cp-1076L : inexact-ok
= exp downward ldbl-128 -0x2.e870a7e5e88c2p+8L : 0x4.00029f178d18f9ba8fe2abd80f94p-1076L : inexact-ok
= exp tonearest ldbl-128 -0x2.e870a7e5e88c2p+8L : 0x4.00029f178d18f9ba8fe2abd80f98p-1076L : inexact-ok
= exp towardzero ldbl-128 -0x2.e870a7e5e88c2p+8L : 0x4.00029f178d18f9ba8fe2abd80f94p-1076L : inexact-ok
= exp upward ldbl-128 -0x2.e870a7e5e88c2p+8L : 0x4.00029f178d18f9ba8fe2abd80f98p-1076L : inexact-ok
= exp downward ldbl-128ibm -0x2.e870a7e5e88c2p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-128ibm -0x2.e870a7e5e88c2p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-128ibm -0x2.e870a7e5e88c2p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-128ibm -0x2.e870a7e5e88c2p+8L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.e870a7e5e88c1f0cp+8L : 0x4.00029f178d1cc9b8p-1076L : inexact-ok
= exp tonearest ldbl-96-intel -0x2.e870a7e5e88c1f0cp+8L : 0x4.00029f178d1cc9cp-1076L : inexact-ok
= exp towardzero ldbl-96-intel -0x2.e870a7e5e88c1f0cp+8L : 0x4.00029f178d1cc9b8p-1076L : inexact-ok
= exp upward ldbl-96-intel -0x2.e870a7e5e88c1f0cp+8L : 0x4.00029f178d1cc9cp-1076L : inexact-ok
= exp downward ldbl-96-m68k -0x2.e870a7e5e88c1f0cp+8L : 0x4.00029f178d1cc9b8p-1076L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.e870a7e5e88c1f0cp+8L : 0x4.00029f178d1cc9cp-1076L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.e870a7e5e88c1f0cp+8L : 0x4.00029f178d1cc9b8p-1076L : inexact-ok
= exp upward ldbl-96-m68k -0x2.e870a7e5e88c1f0cp+8L : 0x4.00029f178d1cc9cp-1076L : inexact-ok
= exp downward ldbl-128 -0x2.e870a7e5e88c1f0cp+8L : 0x4.00029f178d1cc9bd0f851e55aebcp-1076L : inexact-ok
= exp tonearest ldbl-128 -0x2.e870a7e5e88c1f0cp+8L : 0x4.00029f178d1cc9bd0f851e55aecp-1076L : inexact-ok
= exp towardzero ldbl-128 -0x2.e870a7e5e88c1f0cp+8L : 0x4.00029f178d1cc9bd0f851e55aebcp-1076L : inexact-ok
= exp upward ldbl-128 -0x2.e870a7e5e88c1f0cp+8L : 0x4.00029f178d1cc9bd0f851e55aecp-1076L : inexact-ok
= exp downward ldbl-128ibm -0x2.e870a7e5e88c1f0cp+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-128ibm -0x2.e870a7e5e88c1f0cp+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-128ibm -0x2.e870a7e5e88c1f0cp+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-128ibm -0x2.e870a7e5e88c1f0cp+8L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.e870a7e5e88c1f1p+8L : 0x4.00029f178d1cb9b8p-1076L : inexact-ok
= exp tonearest ldbl-96-intel -0x2.e870a7e5e88c1f1p+8L : 0x4.00029f178d1cb9cp-1076L : inexact-ok
= exp towardzero ldbl-96-intel -0x2.e870a7e5e88c1f1p+8L : 0x4.00029f178d1cb9b8p-1076L : inexact-ok
= exp upward ldbl-96-intel -0x2.e870a7e5e88c1f1p+8L : 0x4.00029f178d1cb9cp-1076L : inexact-ok
= exp downward ldbl-96-m68k -0x2.e870a7e5e88c1f1p+8L : 0x4.00029f178d1cb9b8p-1076L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.e870a7e5e88c1f1p+8L : 0x4.00029f178d1cb9cp-1076L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.e870a7e5e88c1f1p+8L : 0x4.00029f178d1cb9b8p-1076L : inexact-ok
= exp upward ldbl-96-m68k -0x2.e870a7e5e88c1f1p+8L : 0x4.00029f178d1cb9cp-1076L : inexact-ok
= exp downward ldbl-128 -0x2.e870a7e5e88c1f1p+8L : 0x4.00029f178d1cb9bd0508c0213bb4p-1076L : inexact-ok
= exp tonearest ldbl-128 -0x2.e870a7e5e88c1f1p+8L : 0x4.00029f178d1cb9bd0508c0213bb8p-1076L : inexact-ok
= exp towardzero ldbl-128 -0x2.e870a7e5e88c1f1p+8L : 0x4.00029f178d1cb9bd0508c0213bb4p-1076L : inexact-ok
= exp upward ldbl-128 -0x2.e870a7e5e88c1f1p+8L : 0x4.00029f178d1cb9bd0508c0213bb8p-1076L : inexact-ok
= exp downward ldbl-128ibm -0x2.e870a7e5e88c1f1p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-128ibm -0x2.e870a7e5e88c1f1p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-128ibm -0x2.e870a7e5e88c1f1p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-128ibm -0x2.e870a7e5e88c1f1p+8L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
= exp downward ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cef2p+8L : 0x4.00029f178d1cbba1a34fc1f1ad4cp-1076L : inexact-ok
= exp tonearest ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cef2p+8L : 0x4.00029f178d1cbba1a34fc1f1ad4cp-1076L : inexact-ok
= exp towardzero ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cef2p+8L : 0x4.00029f178d1cbba1a34fc1f1ad4cp-1076L : inexact-ok
= exp upward ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cef2p+8L : 0x4.00029f178d1cbba1a34fc1f1ad5p-1076L : inexact-ok
= exp downward ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cef4p+8L : 0x4.00029f178d1cbba1a34fc1f1a54cp-1076L : inexact-ok
= exp tonearest ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cef4p+8L : 0x4.00029f178d1cbba1a34fc1f1a54cp-1076L : inexact-ok
= exp towardzero ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cef4p+8L : 0x4.00029f178d1cbba1a34fc1f1a54cp-1076L : inexact-ok
= exp upward ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cef4p+8L : 0x4.00029f178d1cbba1a34fc1f1a55p-1076L : inexact-ok
= exp downward ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cep+8L : 0x4.00029f178d1cbba1a34fc1f5754cp-1076L : inexact-ok
= exp tonearest ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cep+8L : 0x4.00029f178d1cbba1a34fc1f5755p-1076L : inexact-ok
= exp towardzero ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cep+8L : 0x4.00029f178d1cbba1a34fc1f5754cp-1076L : inexact-ok
= exp upward ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cep+8L : 0x4.00029f178d1cbba1a34fc1f5755p-1076L : inexact-ok
= exp downward ldbl-128ibm -0x2.e870a7e5e88c1f0f86d8bda5cep+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-128ibm -0x2.e870a7e5e88c1f0f86d8bda5cep+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-128ibm -0x2.e870a7e5e88c1f0f86d8bda5cep+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-128ibm -0x2.e870a7e5e88c1f0f86d8bda5cep+8L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
= exp downward ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cfp+8L : 0x4.00029f178d1cbba1a34fc1f1754cp-1076L : inexact-ok
= exp tonearest ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cfp+8L : 0x4.00029f178d1cbba1a34fc1f1754cp-1076L : inexact-ok
= exp towardzero ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cfp+8L : 0x4.00029f178d1cbba1a34fc1f1754cp-1076L : inexact-ok
= exp upward ldbl-128 -0x2.e870a7e5e88c1f0f86d8bda5cfp+8L : 0x4.00029f178d1cbba1a34fc1f1755p-1076L : inexact-ok
= exp downward ldbl-128ibm -0x2.e870a7e5e88c1f0f86d8bda5cfp+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-128ibm -0x2.e870a7e5e88c1f0f86d8bda5cfp+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-128ibm -0x2.e870a7e5e88c1f0f86d8bda5cfp+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-128ibm -0x2.e870a7e5e88c1f0f86d8bda5cfp+8L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
exp -0x1.75f113c30b1c8p+9
= exp downward flt-32 -0x2.ebe224p+8f : 0x0p+0f : inexact-ok underflow errno-erange
= exp tonearest flt-32 -0x2.ebe224p+8f : 0x0p+0f : inexact-ok underflow errno-erange
= exp towardzero flt-32 -0x2.ebe224p+8f : 0x0p+0f : inexact-ok underflow errno-erange
= exp upward flt-32 -0x2.ebe224p+8f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= exp downward dbl-64 -0x2.ebe224p+8 : 0x0p+0 : inexact-ok underflow errno-erange
= exp tonearest dbl-64 -0x2.ebe224p+8 : 0x0p+0 : inexact-ok underflow errno-erange
= exp towardzero dbl-64 -0x2.ebe224p+8 : 0x0p+0 : inexact-ok underflow errno-erange
= exp upward dbl-64 -0x2.ebe224p+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.ebe224p+8L : 0x2.0b9f4f64aed595b4p-1080L : inexact-ok
= exp tonearest ldbl-96-intel -0x2.ebe224p+8L : 0x2.0b9f4f64aed595b8p-1080L : inexact-ok
= exp towardzero ldbl-96-intel -0x2.ebe224p+8L : 0x2.0b9f4f64aed595b4p-1080L : inexact-ok
= exp upward ldbl-96-intel -0x2.ebe224p+8L : 0x2.0b9f4f64aed595b8p-1080L : inexact-ok
= exp downward ldbl-96-m68k -0x2.ebe224p+8L : 0x2.0b9f4f64aed595b4p-1080L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.ebe224p+8L : 0x2.0b9f4f64aed595b8p-1080L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.ebe224p+8L : 0x2.0b9f4f64aed595b4p-1080L : inexact-ok
= exp upward ldbl-96-m68k -0x2.ebe224p+8L : 0x2.0b9f4f64aed595b8p-1080L : inexact-ok
= exp downward ldbl-128 -0x2.ebe224p+8L : 0x2.0b9f4f64aed595b7b1e41fe97b6ep-1080L : inexact-ok
= exp tonearest ldbl-128 -0x2.ebe224p+8L : 0x2.0b9f4f64aed595b7b1e41fe97b6ep-1080L : inexact-ok
= exp towardzero ldbl-128 -0x2.ebe224p+8L : 0x2.0b9f4f64aed595b7b1e41fe97b6ep-1080L : inexact-ok
= exp upward ldbl-128 -0x2.ebe224p+8L : 0x2.0b9f4f64aed595b7b1e41fe97b7p-1080L : inexact-ok
= exp downward ldbl-128ibm -0x2.ebe224p+8L : 0x0p+0L : inexact-ok underflow errno-erange
= exp tonearest ldbl-128ibm -0x2.ebe224p+8L : 0x0p+0L : inexact-ok underflow errno-erange
= exp towardzero ldbl-128ibm -0x2.ebe224p+8L : 0x0p+0L : inexact-ok underflow errno-erange
= exp upward ldbl-128ibm -0x2.ebe224p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp downward flt-32 -0x2.ebe228p+8f : 0x0p+0f : inexact-ok underflow errno-erange
= exp tonearest flt-32 -0x2.ebe228p+8f : 0x0p+0f : inexact-ok underflow errno-erange
= exp towardzero flt-32 -0x2.ebe228p+8f : 0x0p+0f : inexact-ok underflow errno-erange
= exp upward flt-32 -0x2.ebe228p+8f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= exp downward dbl-64 -0x2.ebe228p+8 : 0x0p+0 : inexact-ok underflow errno-erange
= exp tonearest dbl-64 -0x2.ebe228p+8 : 0x0p+0 : inexact-ok underflow errno-erange
= exp towardzero dbl-64 -0x2.ebe228p+8 : 0x0p+0 : inexact-ok underflow errno-erange
= exp upward dbl-64 -0x2.ebe228p+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.ebe228p+8L : 0x2.0b9720f7ce27844cp-1080L : inexact-ok
= exp tonearest ldbl-96-intel -0x2.ebe228p+8L : 0x2.0b9720f7ce27845p-1080L : inexact-ok
= exp towardzero ldbl-96-intel -0x2.ebe228p+8L : 0x2.0b9720f7ce27844cp-1080L : inexact-ok
= exp upward ldbl-96-intel -0x2.ebe228p+8L : 0x2.0b9720f7ce27845p-1080L : inexact-ok
= exp downward ldbl-96-m68k -0x2.ebe228p+8L : 0x2.0b9720f7ce27844cp-1080L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.ebe228p+8L : 0x2.0b9720f7ce27845p-1080L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.ebe228p+8L : 0x2.0b9720f7ce27844cp-1080L : inexact-ok
= exp upward ldbl-96-m68k -0x2.ebe228p+8L : 0x2.0b9720f7ce27845p-1080L : inexact-ok
= exp downward ldbl-128 -0x2.ebe228p+8L : 0x2.0b9720f7ce27844ea9674284d866p-1080L : inexact-ok
= exp tonearest ldbl-128 -0x2.ebe228p+8L : 0x2.0b9720f7ce27844ea9674284d868p-1080L : inexact-ok
= exp towardzero ldbl-128 -0x2.ebe228p+8L : 0x2.0b9720f7ce27844ea9674284d866p-1080L : inexact-ok
= exp upward ldbl-128 -0x2.ebe228p+8L : 0x2.0b9720f7ce27844ea9674284d868p-1080L : inexact-ok
= exp downward ldbl-128ibm -0x2.ebe228p+8L : 0x0p+0L : inexact-ok underflow errno-erange
= exp tonearest ldbl-128ibm -0x2.ebe228p+8L : 0x0p+0L : inexact-ok underflow errno-erange
= exp towardzero ldbl-128ibm -0x2.ebe228p+8L : 0x0p+0L : inexact-ok underflow errno-erange
= exp upward ldbl-128ibm -0x2.ebe228p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp downward dbl-64 -0x2.ebe227861639p+8 : 0x0p+0 : inexact-ok underflow errno-erange
= exp tonearest dbl-64 -0x2.ebe227861639p+8 : 0x0p+0 : inexact-ok underflow errno-erange
= exp towardzero dbl-64 -0x2.ebe227861639p+8 : 0x0p+0 : inexact-ok underflow errno-erange
= exp upward dbl-64 -0x2.ebe227861639p+8 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.ebe227861639p+8L : 0x2.0b981a509bab7298p-1080L : inexact-ok
= exp tonearest ldbl-96-intel -0x2.ebe227861639p+8L : 0x2.0b981a509bab7298p-1080L : inexact-ok
= exp towardzero ldbl-96-intel -0x2.ebe227861639p+8L : 0x2.0b981a509bab7298p-1080L : inexact-ok
= exp upward ldbl-96-intel -0x2.ebe227861639p+8L : 0x2.0b981a509bab729cp-1080L : inexact-ok
= exp downward ldbl-96-m68k -0x2.ebe227861639p+8L : 0x2.0b981a509bab7298p-1080L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.ebe227861639p+8L : 0x2.0b981a509bab7298p-1080L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.ebe227861639p+8L : 0x2.0b981a509bab7298p-1080L : inexact-ok
= exp upward ldbl-96-m68k -0x2.ebe227861639p+8L : 0x2.0b981a509bab729cp-1080L : inexact-ok
= exp downward ldbl-128 -0x2.ebe227861639p+8L : 0x2.0b981a509bab72997118df69cd7ep-1080L : inexact-ok
= exp tonearest ldbl-128 -0x2.ebe227861639p+8L : 0x2.0b981a509bab72997118df69cd8p-1080L : inexact-ok
= exp towardzero ldbl-128 -0x2.ebe227861639p+8L : 0x2.0b981a509bab72997118df69cd7ep-1080L : inexact-ok
= exp upward ldbl-128 -0x2.ebe227861639p+8L : 0x2.0b981a509bab72997118df69cd8p-1080L : inexact-ok
= exp downward ldbl-128ibm -0x2.ebe227861639p+8L : 0x0p+0L : inexact-ok underflow errno-erange
= exp tonearest ldbl-128ibm -0x2.ebe227861639p+8L : 0x0p+0L : inexact-ok underflow errno-erange
= exp towardzero ldbl-128ibm -0x2.ebe227861639p+8L : 0x0p+0L : inexact-ok underflow errno-erange
= exp upward ldbl-128ibm -0x2.ebe227861639p+8L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
exp -max
= exp downward flt-32 -0xf.fffffp+124f : 0x0p+0f : inexact-ok underflow errno-erange
= exp tonearest flt-32 -0xf.fffffp+124f : 0x0p+0f : inexact-ok underflow errno-erange

View File

@ -6017,6 +6017,30 @@ ildouble: 1
ldouble: 1
# exp_towardzero
Test "exp_towardzero (-0x2.e870a4p+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.e870a7e5e88c1f0cp+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.e870a7e5e88c1f1p+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.e870a7e5e88c2p+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.e870a7e5e88cp+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.e870a8p+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.ebe224p+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.ebe228p+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (0x2.c5cp+8)":
double: 1
idouble: 1
@ -6047,6 +6071,12 @@ ildouble: 1
ldouble: 1
# exp_upward
Test "exp_upward (-0x2.e870a7e5e88c1f0cp+8)":
ildouble: 1
ldouble: 1
Test "exp_upward (-0x2.e870a7e5e88cp+8)":
ildouble: 1
ldouble: 1
Test "exp_upward (1)":
double: 1
float: 1
@ -8112,6 +8142,8 @@ double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
Function: "expm1":
ildouble: 1

View File

@ -39,6 +39,7 @@
#include "uexp.tbl"
#include <math_private.h>
#include <fenv.h>
#include <float.h>
#ifndef SECTION
# define SECTION
@ -169,7 +170,7 @@ __ieee754_exp (double x)
else
{
retval = __slowexp (x);
goto ret;
goto check_uflow_ret;
} /*if error is over bound */
}
ex = -(1022 + ex);
@ -185,13 +186,23 @@ __ieee754_exp (double x)
{
binexp.i[HIGH_HALF] = 0x00100000;
retval = (res - 1.0) * binexp.x;
goto ret;
goto check_uflow_ret;
}
else
{
retval = __slowexp (x);
goto ret;
goto check_uflow_ret;
} /* if error is over bound */
check_uflow_ret:
if (retval < DBL_MIN)
{
#if FLT_EVAL_METHOD != 0
volatile
#endif
double force_underflow = tiny * tiny;
math_force_eval (force_underflow);
}
goto ret;
}
else
{

View File

@ -6882,6 +6882,30 @@ ildouble: 1
ldouble: 1
# exp_towardzero
Test "exp_towardzero (-0x2.e870a4p+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.e870a7e5e88c1f0cp+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.e870a7e5e88c1f1p+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.e870a7e5e88c2p+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.e870a7e5e88cp+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.e870a8p+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.ebe224p+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (-0x2.ebe228p+8)":
ildouble: 1
ldouble: 1
Test "exp_towardzero (0x2.c5cp+8)":
ildouble: 1
ldouble: 1
@ -6917,6 +6941,32 @@ ildouble: 1
ldouble: 1
# exp_upward
Test "exp_upward (-0x2.e870a4p+8)":
double: 1
idouble: 1
Test "exp_upward (-0x2.e870a7e5e88c1f0cp+8)":
ildouble: 1
ldouble: 1
Test "exp_upward (-0x2.e870a7e5e88c2p+8)":
double: 1
idouble: 1
Test "exp_upward (-0x2.e870a7e5e88cp+8)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
Test "exp_upward (-0x2.e870a8p+8)":
double: 1
idouble: 1
Test "exp_upward (-0x2.ebe224p+8)":
double: 1
idouble: 1
Test "exp_upward (-0x2.ebe227861639p+8)":
double: 1
idouble: 1
Test "exp_upward (-0x2.ebe228p+8)":
double: 1
idouble: 1
Test "exp_upward (-0x4.d2p+8)":
double: 1
idouble: 1
@ -9208,6 +9258,8 @@ double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
Function: "expm1":
double: 1