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 56e9083..60c5252 100644
--- a/Lib/test/test_complex.py
+++ b/Lib/test/test_complex.py
@@ -431,6 +431,13 @@
@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):
vals = [0.0, 1e-500, 1e-315, 1e-200, 0.0123, 3.1415, 1e50, INF, NAN]
vals += [-v for v in vals]
diff --git a/Misc/NEWS b/Misc/NEWS
index 6051d1b..db2d60d 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,10 @@
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 6e31723..b976b6d 100644
--- a/Objects/complexobject.c
+++ b/Objects/complexobject.c
@@ -989,8 +989,6 @@
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 @@
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 @@
PyErr_SetString(PyExc_ValueError,
"complex() arg is a malformed string");
return NULL;
-
- overflow:
- PyErr_SetString(PyExc_OverflowError,
- "complex() arg overflow");
- return NULL;
}
static PyObject *