Kaydet (Commit) 348dc880 authored tarafından Alex Martelli's avatar Alex Martelli

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.
üst 39c532c0
...@@ -99,25 +99,12 @@ class IEEEFormatTestCase(unittest.TestCase): ...@@ -99,25 +99,12 @@ class IEEEFormatTestCase(unittest.TestCase):
('<f', LE_FLOAT_NAN)]: ('<f', LE_FLOAT_NAN)]:
struct.unpack(fmt, data) 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(): def test_main():
test_support.run_unittest( test_support.run_unittest(
FormatFunctionsTestCase, FormatFunctionsTestCase,
UnknownFormatTestCase, UnknownFormatTestCase,
IEEEFormatTestCase, IEEEFormatTestCase)
IEEEOperationsTestCase,
)
if __name__ == '__main__': if __name__ == '__main__':
test_main() test_main()
...@@ -821,12 +821,12 @@ float_pow(PyObject *v, PyObject *w, PyObject *z) ...@@ -821,12 +821,12 @@ float_pow(PyObject *v, PyObject *w, PyObject *z)
ix = pow(iv, iw); ix = pow(iv, iw);
PyFPE_END_PROTECT(ix) PyFPE_END_PROTECT(ix)
Py_ADJUST_ERANGE1(ix); Py_ADJUST_ERANGE1(ix);
/* we need to ignore ERANGE here and just return inf */ if (errno != 0) {
if (errno != 0 && errno != ERANGE) {
/* We don't expect any errno value other than ERANGE, but /* We don't expect any errno value other than ERANGE, but
* the range of libm bugs appears unbounded. * the range of libm bugs appears unbounded.
*/ */
PyErr_SetFromErrno(PyExc_ValueError); PyErr_SetFromErrno(errno == ERANGE ? PyExc_OverflowError :
PyExc_ValueError);
return NULL; return NULL;
} }
return PyFloat_FromDouble(ix); return PyFloat_FromDouble(ix);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment