Rich Comparisons Gotcha

acerimusdux acerimusdux at
Mon Dec 8 00:33:37 CET 2008

James Stroud wrote:
> <div class="moz-text-flowed" style="font-family: -moz-fixed">Rasmus 
> Fogh wrote:
>> Current behaviour is both inconsistent and counterintuitive, as these
>> examples show.
>>>>> x = float('NaN')
>>>>> x == x
>> False
> Perhaps this should raise an exception? I think the problem is not 
> with comparisons in general but with the fact that nan is type float:
> py> type(float('NaN'))
> <type 'float'>
> No float can be equal to nan, but nan is a float. How can something be 
> not a number and a float at the same time? The illogicality of nan's 
> type creates the possibility for the illogical results of comparisons 
> to nan including comparing nan to itself.

I initially thought that looked like a bug to me.  But, this is 
apparently standard behavior required for "NaN".  I'm only using 
Wikipedia as a reference here, but about 80% of the way down, under 
"standard operations":

"Comparison operations. NaN is treated specially in that NaN=NaN always 
returns false."

Presumably since floating point calculations return "NaN" for some 
operations, and one "Nan" is usually not equal to another, this is the 
required behavior. So not a Python issue (though understandably a bit 

The array issue seems to be with one 3rd party library, and one can 
choose to use or not use their library, to ask them to change it, or 
even to decide to override their == operator, if one doesn't like the 
way it is designed.

More information about the Python-list mailing list