[Python-checkins] r51530 - in python/trunk: Lib/test/test_float.py Objects/floatobject.c

alex.martelli python-checkins at python.org
Thu Aug 24 00:17:59 CEST 2006


Author: alex.martelli
Date: Thu Aug 24 00:17:59 2006
New Revision: 51530
Modified:
 python/trunk/Lib/test/test_float.py
 python/trunk/Objects/floatobject.c
Log:
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.
Modified: python/trunk/Lib/test/test_float.py
==============================================================================
--- python/trunk/Lib/test/test_float.py	(original)
+++ python/trunk/Lib/test/test_float.py	Thu Aug 24 00:17:59 2006
@@ -99,25 +99,12 @@
 ('<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()
Modified: python/trunk/Objects/floatobject.c
==============================================================================
--- python/trunk/Objects/floatobject.c	(original)
+++ python/trunk/Objects/floatobject.c	Thu Aug 24 00:17:59 2006
@@ -821,12 +821,12 @@
 	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);


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /