[Python-Dev] PyObject_RichCompareBool identity shortcut

Rob Cliffe rob.cliffe at btinternet.com
Thu Apr 28 20:14:12 CEST 2011


On 28/04/2011 18:26, Steven D'Aprano wrote:
> Rob Cliffe wrote:
>
>> To me the idea of non-reflexive equality (an object not being equal 
>> to itself) is abhorrent.  Nothing is more likely to put off new 
>> Python users if they happen to run into it.
>
> I believe that's a gross exaggeration. In any case, that's just your 
> opinion, and Python is hardly the only language that supports (at 
> least partially) NANs.
>
> Besides, floats have all sorts of unintuitive properties that go 
> against properties of real numbers, and new users manage to cope.
>
> With floats, even ignoring NANs, you can't assume:
>
> a*(b+c) == a*b + a*c
> a+b+c = c+b+a
> 1.0/x*x = 1
> x+y-x = y
> x+1 > x
>
> or many other properties of real numbers. In real code, the lack of 
> reflexivity for NANs is just not that important. You can program for 
> *years* without once accidentally stumbling over one, whereas you 
> can't do the simplest floating point calculation without stubbing your 
> toes on things like this:
>
> >>> 1.0/10
> 0.10000000000000001
>
Of course, these are inevitable consequences of floating-point 
representation.  Inevitable in just about *any* language.
>
> The fact is, NANs are useful. Less useful in Python, which goes out of 
> the way to avoid generating them (a pity, in my opinion), but still 
> useful.
>
I am not arguing against the use of NANs.  Or even against different 
NANs not being equal to each other.
What I was arguing about was the behaviour of Python objects that 
represent NANs, specifically in allowing
     x == x
to be False, something which is *not* inevitable but a choice of 
language design or usage.

Rob Cliffe


More information about the Python-Dev mailing list