Imprecise Basic operations

Hi everyone,
I am using Matlab 2009a. When I try to calculate
0.9 - 0.8 - 0.1
then the result is
-2.775557561562891 e-017
Close to zero, but not zero. Is it not possible to get a precise solution for a floating point operation? This minor imprecision has large implications for my programs.
Is there a way to get precise calculations? Why does matlab get this (quite easy task) wrong?
Thanks for your help!

1 Comment

You might find this FEX submission useful:
http://www.mathworks.com/matlabcentral/fileexchange/22239-num2strexact-exact-version-of-num2str

Sign in to comment.

 Accepted Answer

Nathan Greco
Nathan Greco on 13 Jul 2011

2 votes

Welcome to the world of floating point computing.
A computer can't exactly represent most floating point numbers.
Example: Try calculating 3*(1/3) by hand, with writing out 1/3 to as many decimal places as you please. You will get .9999..., which is CLOSE to 1, but is not equal to 1 (which the true answer should be).

2 Comments

Jan
Jan on 13 Jul 2011
+1: Exactly. The behaviour is neither "wrong" nor "inprecise". It simply demonstrates the limited precision.
Though if you go an infinite number of decimal places, 0.99999999999999.... (with infinite 9's) *is* equal to 1.
If you had an infinite number of bits, you could get an exact binary representation for 0.1 -- but of course no physically realizable computer can be infinite.

Sign in to comment.

More Answers (1)

Philipp
Philipp on 14 Jul 2011

0 votes

Thanks for your quick responses. I was aware of the numerical issues when calculation 1/3 * 3, or using non-rational numbers. But I was not aware of the fact that the binary representation of 0.1 has a infinite number of digits. Thanks.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!