]> granicus.if.org Git - python/commitdiff
Merged revisions 64349 via svnmerge from
authorBenjamin Peterson <benjamin@python.org>
Tue, 17 Jun 2008 22:39:26 +0000 (22:39 +0000)
committerBenjamin Peterson <benjamin@python.org>
Tue, 17 Jun 2008 22:39:26 +0000 (22:39 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r64349 | mark.dickinson | 2008-06-17 16:16:55 -0500 (Tue, 17 Jun 2008) | 4 lines

  Issue 3118: make test_math pass on Ubuntu/ia64.  exp(-745.0) was raising
  OverflowError incorrectly on this platform, presumably as a result of
  the libm setting errno = ERANGE for this call.
........

Modules/mathmodule.c

index fa607e3f1ea14a70e3b57f8f4f3a98d7c9a53d55..4c820c584881bd5313103fab72fa14e06aecd43c 100644 (file)
@@ -82,12 +82,17 @@ is_error(double x)
                 * should return a zero on underflow, and +- HUGE_VAL on
                 * overflow, so testing the result for zero suffices to
                 * distinguish the cases).
+                *
+                * On some platforms (Ubuntu/ia64) it seems that errno can be
+                * set to ERANGE for subnormal results that do *not* underflow
+                * to zero.  So to be safe, we'll ignore ERANGE whenever the
+                * function result is less than one in absolute value.
                 */
-               if (x)
+               if (fabs(x) < 1.0)
+                       result = 0;
+               else
                        PyErr_SetString(PyExc_OverflowError,
                                        "math range error");
-               else
-                       result = 0;
        }
        else
                 /* Unexpected math error */