[Python-Dev] Why is nan != nan?
Mark Dickinson
dickinsm at gmail.com
Wed Mar 24 23:31:42 CET 2010
On Wed, Mar 24, 2010 at 10:30 PM, Alexander Belopolsky
<alexander.belopolsky at gmail.com> wrote:
> On Wed, Mar 24, 2010 at 6:21 PM, Raymond Hettinger
> <raymond.hettinger at gmail.com> wrote:
> ..
>> If we want to be able to reason about our programs,
>> then we need to rely on equality relations being
>> reflexsive, symmetric, and transitive. Otherwise,
>> containers and functions can't even make minimal
>> guarantees about what they do.
>
> +1
>
>> .. We should probably draw the
>> line at well-defined numeric contexts such as the decimal module
>> and stop trying to propagate NaN awareness throughout the
>> entire object model.
>
> I am not sure what this means in practical terms. Should
> float('nan') == float('nan') return True or should float('nan') raise
> an exception to begin with? I would prefer the former.
>
Neither is necessary, because Python doesn't actually use == as the
equivalence relation for containment testing: the actual equivalence
relation is: x equivalent to y iff id(x) == id(y) or x == y. This
restores the missing reflexivity (besides being a useful
optimization).
Mark
More information about the Python-Dev
mailing list