2010/7/30 Guillaume Chérel <guillaume.c.che...@gmail.com>: > Hello, > > I ran into a difficulty with floating point arithmetic in python. Namely > that: > > >>> 0.001 + 1 - 1 > 0.00099999999999988987 > > And, as a consequence, in python: > > >>> 0.001 + 1 - 1 == 0.001 > False > > In more details, my problem is that I have a fonction which needs to > compute (a + b - c) % a. And for b == c, you would expect the result to > be 0 whatever the value of a. But it isn't... > > >>> (0.001 + 1 - 1) % 0.001 > 0.00099999999999988987 > > Is there any way to solve this?
You can do slightly better than normal floating point arithmetic using some special algorithms that compensate in one way or another for the error. See math.fsum: http://docs.python.org/library/math.html#math.fsum >>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) 0.9999999999999999 >>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) 1.0 >>> fsum([0.001, +1, -1]) 0.001 It won't be as fast, and naturally it won't always work, but it's something. _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion