Mercurial > cpython-lru_cache-weakref
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;
