6*0.003125 - 0.018750 = 0, right? How to get the right answer?

In Matlab >> 6*0.003125
ans =
0.018750000000000
>> 6*0.003125 - 0.01875
ans =
3.469446951953614e-18
In Mathematica
In[17]:= 6*0.003125 6*0.003125 - 0.018750
Out[17]= 0.01875
Out[18]= 3.46945*10^-18
~~~~~~~~~~~~~~~~~~~~~~~~~~~How can I get the right answer??

 Réponse acceptée

Walter Roberson
Walter Roberson le 15 Oct 2015
Matlab is giving you the right answer. Matlab uses IEEE 754 binary floating point double precision. Floating point operations are not algebraic and not generally commutative.
In binary floating point there is no exact representation of 0.1, just the same way that in base 10 there is no way to exactly represent 1/7 in any finite precision decimal number.

Plus de réponses (2)

You can compare the results against the machine precision eps and regard them as equal if smaller than eps
6*0.003125 - 0.01875 < eps

1 commentaire

I finally understand the equal in case using computer, Thank you.

Connectez-vous pour commenter.

Steven Lord
Steven Lord le 15 Oct 2015
For a more in-depth answer to this general situation, with many references, see question 1 in the Mathematics section of the FAQ.

Community Treasure Hunt

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

Start Hunting!

Translated by