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 件のコメント

James Tursa
James Tursa 2011 年 7 月 13 日
You might find this FEX submission useful:
http://www.mathworks.com/matlabcentral/fileexchange/22239-num2strexact-exact-version-of-num2str

サインインしてコメントする。

 採用された回答

Nathan Greco
Nathan Greco 2011 年 7 月 13 日

2 投票

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 件のコメント

Jan
Jan 2011 年 7 月 13 日
+1: Exactly. The behaviour is neither "wrong" nor "inprecise". It simply demonstrates the limited precision.
Walter Roberson
Walter Roberson 2011 年 7 月 13 日
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.

サインインしてコメントする。

その他の回答 (1 件)

Philipp
Philipp 2011 年 7 月 14 日

0 投票

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!

Translated by