Imprecise Basic operations

2 次查看(过去 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
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
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
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.

类别

Help CenterFile Exchange 中查找有关 Introduction to Installation and Licensing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by