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

Reply via email to