diff Objects/floatobject.c @ 33549:ecaf0e8fa737 legacy-trunk

float_richcompare(): Use the new Py_IS_NAN macro to ensure that, on platforms where that macro works, NaN compared to an int or long works the same as NaN compared to a finite float.
author Tim Peters <tim.peters@gmail.com>
date Thu, 23 Sep 2004 19:22:41 +0000
parents 702367da2c72
children 9a1b1e1ae653
line wrap: on
line diff
--- a/Objects/floatobject.c	Thu Sep 23 19:11:32 2004 +0000
+++ b/Objects/floatobject.c	Thu Sep 23 19:22:41 2004 +0000
@@ -384,13 +384,11 @@
 	if (PyFloat_Check(w))
 		j = PyFloat_AS_DOUBLE(w);
 
-	else if (Py_IS_INFINITY(i)) {
-		/* XXX If we had a reliable way to check whether i is a
-		 * XXX NaN, it would belong in this branch too.
-		 */
+	else if (Py_IS_INFINITY(i) || Py_IS_NAN(i)) {
 		if (PyInt_Check(w) || PyLong_Check(w))
-			/* The magnitude of i exceeds any finite integer,
-			 * so it doesn't matter which int we compare i with.
+			/* If i is an infinity, its magnitude exceeds any
+			 * finite integer, so it doesn't matter which int we
+			 * compare i with.  If i is a NaN, similarly.
 			 */
 			j = 0.0;
 		else
@@ -403,7 +401,7 @@
 		 * Cray single with 48 bits of precision, and long has 64
 		 * bits.
 		 */
-#if SIZEOF_LONG > 4
+#if SIZEOF_LONG > 6
 		unsigned long abs = (unsigned long)(jj < 0 ? -jj : jj);
 		if (abs >> 48) {
 			/* Needs more than 48 bits.  Make it take the
@@ -443,10 +441,10 @@
 		nbits = _PyLong_NumBits(w);
 		if (nbits == (size_t)-1 && PyErr_Occurred()) {
 			/* This long is so large that size_t isn't big enough
-			 * to hold the # of Python digits.  Replace with
-			 * little doubles that give the same outcome --
-			 * w is so large that its magnitude must exceed
-			 * the magnitude of any finite float.
+			 * to hold the # of bits.  Replace with little doubles
+			 * that give the same outcome -- w is so large that
+			 * its magnitude must exceed the magnitude of any
+			 * finite float.
 			 */
 			PyErr_Clear();
 			i = (double)vsign;