[Python-Dev] Decimal & amp; lt; -& amp; gt; float comparisons in py3k.

Glenn Linderman v+python at g.nevcal.com
Fri Mar 19 20:16:35 CET 2010


On 3/19/2010 11:43 AM, Terry Reedy wrote:
> On 3/19/2010 2:11 PM, Antoine Pitrou wrote:
>> Raymond Hettinger<raymond.hettinger<at>  gmail.com>  writes:
>>>
>>> The reason to prefer an exception is that decimal/float comparisons
>>> are more likely to be a programmer error than an intended behavior.
>
> If you really believe that, then equality comparisons should also be 
> disabled by raising NotImplemented or whatever. 

Totally agree.  While the example most used in this thread is a less 
than operator, the text of the thread has never (as far as I have read) 
distinguished between equality, inequality, or relative signed magnitude 
comparisons.  Sort has also been mentioned explicitly as an example.  I 
perceive that the whole thread is about _all_ comparison operators with 
one float and one decimal operand currently producing an exception (3.x) 
or a type-based ordering (2.x).

The type-based ordering has been demonstrated to produce unstable sorts 
in the presence of other types also, so is more of a problem than first 
perceived, and should be changed.


> Clearly, someone who writes 'if somefloat == somedecimal:'assumes (now 
> wrongly) that the test might be true. This is just as buggy as an 
> order comparison. Raising an exception would consistently isolate 
> decimals from other numbers and eliminate the equality intransitivity 
> mess and its nasty effect on sets.

Totally agree.


> It still strikes me as a bit crazy for Python to say that 0.0 == 0 and 
> 0 == Decimal(0) but that 0.0 != Decimal(0). Who would expect such a 
> thing?

The same person that would expect both

0 == "0"
0.0 == "0.0"

to be False... i.e. anyone that hasn't coded in Perl for too many years.

Glenn



More information about the Python-Dev mailing list