[Python-Dev] Decimal <-> float comparisons in py3k. (original) (raw)

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