]> granicus.if.org Git - python/commitdiff
Issue #5829: don't raise OverflowError for complex('1e500'). Backport of r72803.
authorMark Dickinson <dickinsm@gmail.com>
Wed, 20 May 2009 18:43:07 +0000 (18:43 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Wed, 20 May 2009 18:43:07 +0000 (18:43 +0000)
Lib/test/test_complex.py
Misc/NEWS
Objects/complexobject.c

index 56e9083eb74d8362690defd6442bb35906a49470..60c52521ee1aa57bfac57ffd37e5b028e0d20b33 100644 (file)
@@ -429,6 +429,13 @@ class ComplexTest(unittest.TestCase):
             self.assertEquals(atan2(z1.imag, -1.), atan2(0., -1.))
             self.assertEquals(atan2(z2.imag, -1.), atan2(-0., -1.))
 
+    @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"),
+                         "test requires IEEE 754 doubles")
+    def test_overflow(self):
+        self.assertEqual(complex("1e500"), complex(INF, 0.0))
+        self.assertEqual(complex("-1e500j"), complex(0.0, -INF))
+        self.assertEqual(complex("-1e500+1.8e308j"), complex(-INF, INF))
+
     @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"),
                          "test requires IEEE 754 doubles")
     def test_repr_roundtrip(self):
index 6051d1b8110c4c578a1feab2dbed1d12278b3b32..db2d60d3ec515236aee48b79cb64460282d086d5 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,10 @@ What's New in Python 2.7 alpha 1
 Core and Builtins
 -----------------
 
+- Issue #5829: complex("1e500") no longer raises OverflowError.  This
+  makes it consistent with float("1e500") and interpretation of real
+  and imaginary literals.
+
 - Issue #3527: Removed Py_WIN_WIDE_FILENAMES which is not used any more.
 
 - __instancecheck__ and __subclasscheck__ are now completely ignored on classic
index 6e3172307d8a922f7cacc7edc7687748c62d2713..b976b6de520dcceb7421be5f39a5a05f51d23538 100644 (file)
@@ -989,8 +989,6 @@ complex_subtype_from_string(PyTypeObject *type, PyObject *v)
        z = PyOS_ascii_strtod(s, &end);
        if (end == s && errno == ENOMEM)
                return PyErr_NoMemory();
-       if (errno == ERANGE && fabs(z) >= 1.0)
-               goto overflow;
 
        if (end != s) {
                /* all 4 forms starting with <float> land here */
@@ -1002,8 +1000,6 @@ complex_subtype_from_string(PyTypeObject *type, PyObject *v)
                        y = PyOS_ascii_strtod(s, &end);
                        if (end == s && errno == ENOMEM)
                                return PyErr_NoMemory();
-                       if (errno == ERANGE && fabs(y) >= 1.0)
-                               goto overflow;
                        if (end != s)
                                /* <float><signed-float>j */
                                s = end;
@@ -1063,11 +1059,6 @@ complex_subtype_from_string(PyTypeObject *type, PyObject *v)
        PyErr_SetString(PyExc_ValueError,
                        "complex() arg is a malformed string");
        return NULL;
-
-  overflow:
-       PyErr_SetString(PyExc_OverflowError,
-                       "complex() arg overflow");
-       return NULL;
 }
 
 static PyObject *