
On Sat, 20 Mar 2010 08:50:04 am Guido van Rossum wrote:
I'd like to reboot this thread. I've been spinning this topic in my head for most of the morning, and I think we should seriously reconsider allowing mixed arithmetic involving Decimal, not just mixed comparisons. [Quick summary: embed Decimal in the numeric tower but add a context flag to disallow implicit mixing of float and Decimal.]
The last few days, I've argued against changing the prohibition against mixed arithmetic operations. But you've inspired me to go take a look at a module I've been neglecting, fractions, and I've learned that the Fraction type already fully supports arithmetic and comparisons with floats and ints. I'm extremely impressed -- I had no idea the numeric tower in 2.6 was this advanced. (I still do most of my work with 2.5.) Decimal appears to be the odd one:
f = Fraction(0) d = Decimal(0) 0 == 0.0 == 0j == f True 0 == 0.0 == 0j == f == d False
Not just odd in the sense of "different", but also odd in the sense of "weird":
d == 0 == 0.0 == 0j == f True
[...]
I'd like to look at the issue by comparing the benefits and drawbacks of properly embedding Decimal into the numeric tower. As advantages, I see consistent behavior in situations like the above and more intuitive behavior for beginners. Also, this would be a possible road towards eventually supporting a language extension where floating point literals produce Decimal values instead of binary floats. (A possible syntax could be "from __options__ import decimal_float", which would work similar to "from __future__ import ..." except it's a permanent part of the language rather than a forward compatibility feature.)
That's far more ambitious than I was willing to even imagine, but now that you've suggested it, I like it. -- Steven D'Aprano