On Fri, 04 Apr 2014 09:43:15 +1100, Chris Angelico wrote: > While I am interested in seeing a Decimal literal syntax in Python, and > I would support a shift to have "1.2" evaluate as a Decimal (but not > soon - it'd break backward compat *hugely*)
I used to think the same thing, but have since learned that it's not a coincidence or accident that people seriously interested in numerical computation nearly always stick to binary floats. I think it's a little harsh to say that only dilettantes and amateurs use base-10 floats, but only a little. Base-10 has one, and only one, thing going for it: the number you type (in decimal) is the number you get (within the limits of precision). Apart from that, in every way IEEE-754 binary floats are as good or better than any other choice of base, including decimal. The same floating-point complications that plague binary floats also plague decimal ones, only worse. I really should stop being shocked by anything I learn about floating point numbers, but something that knocked my socks off when I learned it was that as simple an operation as taking the average of two floats is problematic in decimal. In base-2, and given round-to-nearest division, (x+y)/2 is always within the range x...y. But that's not necessarily the case in base-10 floats: sometimes the average of two numbers is not between those two numbers. Contrast binary floats: py> x = 0.7777777777787516 py> y = 0.7777777777787518 py> (x + y) / 2 0.7777777777787517 with decimal: py> from decimal import * py> getcontext().prec = 16 py> x = Decimal("0.7777777777787516") py> y = Decimal("0.7777777777787518") py> (x + y) / 2 Decimal('0.7777777777787515') "Guido, why can't Python do maths???" (Oh lordy, can you imagine Ranting Rick getting onto that???) I've changed my mind about Python using Decimal as the default numeric type. I think that would send a very strong message that Python is not for serious numeric work. -- Steven D'Aprano http://import-that.dreamwidth.org/ -- https://mail.python.org/mailman/listinfo/python-list