float("nan") in set or as key

Steven D'Aprano steve+comp.lang.python at pearwood.info
Sun May 29 06:29:28 EDT 2011


On Sat, 28 May 2011 23:12:54 -0700, John Nagle wrote:

>     The correct answer to "nan == nan" is to raise an exception, because
> you have asked a question for which the answer is nether True nor False.

Wrong.

The correct answer to "nan == nan" is False, they are not equal. Just as 
None != "none", and 42 != [42], or a teacup is not equal to a box of 
hammers.

Asking whether NAN < 0 could arguably either return "unordered" (raise an 
exception) or return False ("no, NAN is not less than zero; neither is it 
greater than zero"). The PowerPC Macintishes back in the 1990s supported 
both behaviours. But that's different to equality tests.


>     The correct semantics for IEEE floating point look something like
> this:
> 
> 	1/0 		INF
> 	INF + 1		INF
> 	INF - INF	NaN
> 	INF == INF	unordered

Wrong. Equality is not an order comparison.



-- 
Steven



More information about the Python-list mailing list