[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[patches] Patch for expf wrongly returning infinity (FSF glibc bug 3406)
- To: patches@xxxxxxxxxx
- Subject: [patches] Patch for expf wrongly returning infinity (FSF glibc bug 3406)
- From: "Joseph S. Myers" <joseph@xxxxxxxxxxxxxxxx>
- Date: Mon, 11 Feb 2008 20:58:09 +0000 (UTC)
expf wrongly returns infinity when it should return a value just below
FLT_MAX, as reported in bug 3406, because w_expf.c has a wrong figure
for the largest expf input with finite float output. The figure in
e_expf.c for the smallest expf input with infinite float output is
correct; this patch changes w_expf.c to use the correct value (the
next float lower than the one in e_expf.c).
Committed to EGLIBC trunk, 2.7, 2.6, 2.5.
Index: sysdeps/ieee754/flt-32/w_expf.c
===================================================================
--- sysdeps/ieee754/flt-32/w_expf.c (revision 5131)
+++ sysdeps/ieee754/flt-32/w_expf.c (working copy)
@@ -29,7 +29,7 @@
#else
static float
#endif
-o_threshold= 8.8721679688e+01, /* 0x42b17180 */
+o_threshold= 8.8722831726e+01, /* 0x42b17217 */
u_threshold= -1.0397208405e+02; /* 0xc2cff1b5 */
#ifdef __STDC__
Index: math/libm-test.inc
===================================================================
--- math/libm-test.inc (revision 5131)
+++ math/libm-test.inc (working copy)
@@ -2510,6 +2510,7 @@
TEST_f_f (exp, 3, M_E3l);
TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
+ TEST_f_f (exp, 88.72269439697265625L, 3.40233126623160774937554134772290447915e38L);
#ifdef TEST_LDOUBLE
/* The result can only be represented in long double. */
TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
Index: ChangeLog.eglibc
===================================================================
--- ChangeLog.eglibc (revision 5131)
+++ ChangeLog.eglibc (working copy)
@@ -1,3 +1,9 @@
+2008-02-11 Joseph Myers <joseph@xxxxxxxxxxxxxxxx>
+
+ [BZ #3406]
+ * sysdeps/ieee754/flt-32/w_expf.c (o_threshold): Correct value.
+ * math/libm-test.inc (exp_test): Test 88.72269439697265625.
+
2008-02-07 Joseph Myers <joseph@xxxxxxxxxxxxxxxx>
* Makerules (install-extras, install-map): New variables.
--
Joseph S. Myers
joseph@xxxxxxxxxxxxxxxx