Alec Taylor writes: > Simple mathematical problem, + and - only: > > >>> 1800.00-1041.00-555.74+530.74-794.95 > -60.950000000000045 > > That's wrong.
Not by much. I'm not an expert, but my guess is that the exact value is not representable in binary floating point, which most programming languages use for this. Ah, indeed: >>> 0.95 0.94999999999999996 Some languages hide the error by printing fewer decimals than they use internally. > Proof > http://www.wolframalpha.com/input/?i=1800.00-1041.00-555.74%2B530.74-794.95 > -60.95 aka (-(1219/20)) > > Is there a reason Python math is only approximated? - Or is this a bug? There are practical reasons. Do learn about "floating point". There is a price to pay, but you can have exact rational arithmetic in Python when you need or want it - I folded the long lines by hand afterwards: >>> from fractions import Fraction >>> 1800 - 1041 - Fraction(55574, 100) + Fraction(53074, 100) - Fraction(79495, 100) Fraction(-1219, 20) >>> -1219/20 -61 >>> -1219./20 -60.950000000000003 >>> float(1800 - 1041 - Fraction(55574, 100) + Fraction(53074, 100) - Fraction(79495, 100)) -60.950000000000003 -- http://mail.python.org/mailman/listinfo/python-list