Chris Rebert wrote:
It seems that decimal arithmetic is more intuitively correct that plain floating point and floating point's main (only?) advantage is speed, but it seems like premature optimization to favor speed over correctness by default at the language level.
One could say the same about rational arithmetic, which as also been considered and so far rejected for fractional literals. In fact, fractions are more accurate since there is never rounding unless one requests it. There is an advantage of binary floats that you missed. One can prototype float functions in Python and then translate as necessary for real speed to C and get the same results (using the same compiler on the same hardware). But even prototypes need to run faster than molasses. One can also use Python to glue together C (or Fortran) double routines without translating the numbers. The numerical module (now numpy) is over a decade old and was, I believe, Python's first killer app.
Obviously, making decimal the default instead of float would be fraught with backward compatibility problems and thus is not presently feasible, but at the least for now Python could make it easier to use decimals and their associated nice arithmetic by having a literal syntax for them and making them built-in.
Ditto for fractions.
So what do people think of: 1. making decimal.Decimal a built-in type, named "decimal" (or "dec" if that's too long?) 2. adding a literal syntax for decimals; I'd naively suggest a 'd' suffix to the float literal syntax (which was suggested in the brief aforementioned thread)
I would just as soon do the same for fractions.Fraction, perhaps 1 f/ 2 or 1///2. Even with decimal literals, the functions would remain in the importable module, just as with math and cmath.
3. (in Python 4.0/Python 4000) making decimal the default instead of float, with floats instead requiring a 'f' suffix
Decimal is not just a decimal arithmetic module. It implements and will track a particular complex, specialized, possibly changeable standard controlled by IBM, which already has a few crazy quirks present for commercial rather than technical reasons. This is fine for an add-on class but not, in my opinion, for Python's default fraction arithmetic. If Python's developers did consider replacing floats in that role, I would prefer either fractions or a much simplified decimal type designed by us for general purpose needs. Terry Jan Reedy