Imprecise Basic operations
1 回表示 (過去 30 日間)
古いコメントを表示
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
2011 年 7 月 13 日
You might find this FEX submission useful:
http://www.mathworks.com/matlabcentral/fileexchange/22239-num2strexact-exact-version-of-num2str
採用された回答
Nathan Greco
2011 年 7 月 13 日
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
2011 年 7 月 13 日
+1: Exactly. The behaviour is neither "wrong" nor "inprecise". It simply demonstrates the limited precision.
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 件)
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!