Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python nan != nan

Tags:

python

math

nan

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x = float('nan')
>>> id(x) == id(x)
True
>>> x == x
False

I'm interested in how nan != nan in python. And just to clarify, I know nan is supposed to behave like that by definition, I'm asking about how not about why. Where is that implemented? Is there any other object which behaves like that?

like image 226
wim Avatar asked Oct 21 '12 23:10

wim


1 Answers

Not A Number (NaN) is unequal with anything. To detect it, use math.isnan. And an object like this is quite easy to define:

class A(object):
    def __eq__(self, other):
        return False

    def __ne__(self, other):
        return True

The reason why this is is quite simple. CPython follows the IEEE 754 standard for floating point math. NaN is a floating point value for which IEEE 754 dictates that it is not equal to any other floating point value.

like image 66
orlp Avatar answered Oct 24 '22 03:10

orlp