[Python-Dev] Decimal <-> float comparisons in py3k.

Glenn Linderman glenn at nevcal.com
Thu Mar 18 21:31:33 CET 2010

On 3/18/2010 12:34 PM, Steven D'Aprano wrote:
> On Fri, 19 Mar 2010 05:27:06 am Glenn Linderman wrote:
>>> Do you envisage any problems from allowing this instead?
>>>>>> Decimal('1.1')<   2.2
>>> True
>> Yes.
>> As any non-naïve float user is aware, the proper form of float
>> comparisons is not to use<  or>  or == or !=, but rather, instead of
>> using<  (to follow along with your example), one should use:
>> Decimal('1.1') - 2.2<  epsilon
> And yet we allow
> 1.1<  2.2
> instead of forcing users to do the "proper form". One can only wonder
> why the various standards (actual and de-facto) for floating point
> allows comparisons at all.

Hard to tell

1.1 < 2.2

from the second line of

diff = 1.1 - 2.2
diff < epsilon

Hard to enforce the "proper form", without being omniscient, and the 
"proper form" isn't always as simple as my example, to be truly proper 
often requires a lot more code (and a lot more omniscience).

I'm +1 on adding an exception for Decimal/float comparisons, -0 on 
allowing it to be turned off to achieve compatible behavior, since 
Raymond pointed out that the compatible sorting behavior isn't stable in 
the presence of int, Decimal, and float.

> But they do, and so does Python, and frankly even if the only reason is
> to satisfy lazy coders who don't have a requirement for high accuracy,
> then that's a good reason in my book, and one equally applicable to
> Decimal and float.

A point well understood, but I personally would rather force 
Decimal/float comparisons to be explicitly converted to be lazily 
compared, if the arithmetic operations are forced to be explicit.

More information about the Python-Dev mailing list