[Python-checkins] r60518 - python/trunk/Objects/floatobject.c

raymond.hettinger python-checkins at python.org
Sat Feb 2 06:11:40 CET 2008


Author: raymond.hettinger
Date: Sat Feb  2 06:11:40 2008
New Revision: 60518

Modified:
   python/trunk/Objects/floatobject.c
Log:
Simpler solution to handling non-IEEE 754 environments.

Modified: python/trunk/Objects/floatobject.c
==============================================================================
--- python/trunk/Objects/floatobject.c	(original)
+++ python/trunk/Objects/floatobject.c	Sat Feb  2 06:11:40 2008
@@ -1173,13 +1173,6 @@
 	obj = call; \
 	Py_DECREF(prev); \
 
-#ifdef FLT_RADIX
-	if (FLT_RADIX != 2) {
-		/* This routine depends on base-2 floating_point. */
-		Py_INCREF(Py_NotImplemented);
-		return Py_NotImplemented;
-	}
-#endif
 	CONVERT_TO_DOUBLE(v, self);
 
 	if (Py_IS_INFINITY(self)) {
@@ -1202,13 +1195,10 @@
 	for (i=0; i<300 && float_part != floor(float_part) ; i++) {
 		float_part *= 2.0;
 		exponent--;
-	}
-	if (i == 300) {
-		/* Could not convert mantissa to an integer */
-		Py_INCREF(Py_NotImplemented);
-		return Py_NotImplemented;
 	}	
-	/* self == float_part * 2**exponent exactly and float_part is integral */
+	/* self == float_part * 2**exponent exactly and float_part is integral.
+           If FLT_RADIX != 2, the 300 steps may leave a tiny fractional part
+           to be truncated by PyLong_FromDouble(). */
 
 	numerator = PyLong_FromDouble(float_part);
 	if (numerator == NULL) goto error;


More information about the Python-checkins mailing list