From: Mark Dickinson Date: Wed, 20 May 2009 18:43:07 +0000 (+0000) Subject: Issue #5829: don't raise OverflowError for complex('1e500'). Backport of r72803. X-Git-Tag: v2.7a1~1139 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a4e0efa4b13e9a51faad19be27b18ed02c9a26f0;p=python Issue #5829: don't raise OverflowError for complex('1e500'). Backport of r72803. --- diff --git a/Lib/test/test_complex.py b/Lib/test/test_complex.py index 56e9083eb7..60c52521ee 100644 --- a/Lib/test/test_complex.py +++ b/Lib/test/test_complex.py @@ -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): diff --git a/Misc/NEWS b/Misc/NEWS index 6051d1b811..db2d60d3ec 100644 --- 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 diff --git a/Objects/complexobject.c b/Objects/complexobject.c index 6e3172307d..b976b6de52 100644 --- a/Objects/complexobject.c +++ b/Objects/complexobject.c @@ -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 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) /* 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 *