[I apologize that I'm not adding this information to the bug report, but I'm not able to log into SF right now, the login page hangs while loading]
1==float('nan') (2004-02-17) http://python.org/sf/899109 opened by Arman Bostani
I'm sure Tim can explain this better, but what happens is this: 1 is coerced to float for comparison. Then, the following C expression is evaluated (Objects/floatobject.c:float_compare): return (i < j) ? -1 : (i > j) ? 1 : 0; Because NaN is "unordered", 1<NaN and NaN<1 are both false, and so python returns 0 from float_compare. Compare to this C program: $ cat compare.c #include <stdio.h> #include <stdlib.h> int main(void) { double a=1.0, b = atof("nan"); printf("a<b: %d b<a: %d a==b: %d cmp(a,b): %d\n", a<b, b<a, a==b, (a < a) ? -1 : (a > a) ? 1 : 0); return 0; } $ gcc -Wall compare.c && ./a.out nan 1.0 a<b: 0 b<a: 0 a==b: 0 cmp(a,b): 0 Jeff