mirror of
https://github.com/python/cpython.git
synced 2026-01-06 15:32:22 +00:00
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.
This commit is contained in:
parent
39c532c0b6
commit
348dc88097
2 changed files with 4 additions and 17 deletions
|
|
@ -99,25 +99,12 @@ def test_float_specials_do_unpack(self):
|
|||
('<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()
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue