summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Martelli <aleaxit@gmail.com>2006-08-23 22:17:59 +0000
committerAlex Martelli <aleaxit@gmail.com>2006-08-23 22:17:59 +0000
commit348dc88097412cc229254f20f2759ce4cd192261 (patch)
treef8108517f0eace50dac1d9fa799eabb677f828f2
parent39c532c0b639b72384a5f5137d3fd5f7d127d814 (diff)
downloadcpython-git-348dc88097412cc229254f20f2759ce4cd192261.tar.gz
Reverting the patch that tried to fix the issue whereby x**2 raises
OverflowError while x*x succeeds and produces infinity; apparently these inconsistencies cannot be fixed across ``all'' platforms and there's a widespread feeling that therefore ``every'' platform should keep suffering forevermore. Ah well.
-rw-r--r--Lib/test/test_float.py15
-rw-r--r--Objects/floatobject.c6
2 files changed, 4 insertions, 17 deletions
diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py
index d616ad9543..fb47db8eb0 100644
--- a/Lib/test/test_float.py
+++ b/Lib/test/test_float.py
@@ -99,25 +99,12 @@ class IEEEFormatTestCase(unittest.TestCase):
('<f', LE_FLOAT_NAN)]:
struct.unpack(fmt, data)
-# on an IEEE platform, "overflowing" operations produce infinity
-
-class IEEEOperationsTestCase(unittest.TestCase):
- if float.__getformat__("double").startswith("IEEE"):
- def test_double_infinity(self):
- big = 4.8e159
- pro = big*big
- self.assertEquals(repr(pro), 'inf')
- sqr = big**2
- self.assertEquals(repr(sqr), 'inf')
-
def test_main():
test_support.run_unittest(
FormatFunctionsTestCase,
UnknownFormatTestCase,
- IEEEFormatTestCase,
- IEEEOperationsTestCase,
- )
+ IEEEFormatTestCase)
if __name__ == '__main__':
test_main()
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 5aeabd9d93..fa09084669 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -821,12 +821,12 @@ float_pow(PyObject *v, PyObject *w, PyObject *z)
ix = pow(iv, iw);
PyFPE_END_PROTECT(ix)
Py_ADJUST_ERANGE1(ix);
- /* we need to ignore ERANGE here and just return inf */
- if (errno != 0 && errno != ERANGE) {
+ if (errno != 0) {
/* We don't expect any errno value other than ERANGE, but
* the range of libm bugs appears unbounded.
*/
- PyErr_SetFromErrno(PyExc_ValueError);
+ PyErr_SetFromErrno(errno == ERANGE ? PyExc_OverflowError :
+ PyExc_ValueError);
return NULL;
}
return PyFloat_FromDouble(ix);