python/dist/src/Objects floatobject.c, 2.126, 2.127
Update of /cvsroot/python/python/dist/src/Objects In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3489/Objects Modified Files: floatobject.c Log Message: "Fix" (for certain configurations of the planets, including recent gcc on Linux/x86) [ 899109 ] 1==float('nan') by implementing rich comparisons for floats. Seems to make comparisons involving NaNs somewhat less surprising when the underlying C compiler actually implements C99 semantics. Index: floatobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/floatobject.c,v retrieving revision 2.126 retrieving revision 2.127 diff -C2 -d -r2.126 -r2.127 *** floatobject.c 17 Jan 2004 14:19:44 -0000 2.126 --- floatobject.c 19 Feb 2004 19:35:22 -0000 2.127 *************** *** 361,364 **** --- 361,398 ---- } + static PyObject* + float_richcompare(PyObject *v, PyObject *w, int op) + { + double i, j; + int r = 0; + + CONVERT_TO_DOUBLE(v, i); + CONVERT_TO_DOUBLE(w, j); + + PyFPE_START_PROTECT("richcompare", return NULL) + switch (op) { + case Py_EQ: + r = i==j; + break; + case Py_NE: + r = i!=j; + break; + case Py_LE: + r = i<=j; + break; + case Py_GE: + r = i>=j; + break; + case Py_LT: + r = i<j; + break; + case Py_GT: + r = i>j; + break; + } + PyFPE_END_PROTECT(a) + return PyBool_FromLong(r); + } + static long float_hash(PyFloatObject *v) *************** *** 835,839 **** 0, /* tp_traverse */ 0, /* tp_clear */ ! 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ --- 869,873 ---- 0, /* tp_traverse */ 0, /* tp_clear */ ! (richcmpfunc)float_richcompare, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */
participants (1)
-
mwh@users.sourceforge.net