Ian Marshall logo

Ian Marshall

Q: The relevant IEEE standard defines a numeric constant NaN (not a number) and prescribes that NaN should compare as not equal to itself. Why is that? All the languages I'm familiar with implement this rule. I am sure there is a good reason why NaN comparing as equal to itself would be bad. I just can't figure out what it is.

Why is NaN not equal to NaN?

There's a very easy answer to this: NaN is supposed to indicate that there's an error in your math calculations. If NaN === NaN were true, then NaN could easily be converted back into a number like so:


If NaN === NaN then z would be 1, hiding that there was a problem in the calculation of both x and y. Instead, z is NaN, which should indicate that a problem happened somewhere along the line.