colon operator rounding problem

1 回表示 (過去 30 日間)
Ambroise
Ambroise 2015 年 7 月 10 日
編集済み: Stephen23 2015 年 7 月 10 日
Hello everyone!
I encountered a problem in one of my code, using the semi colon operator like this:
a = 0:0.1:120;
will not give me exactly what I want, it does return 0, 0.1, 0.2 etc, but with a small imprecision (equal to eps actually)
the following code :
a = 0:0.1:120;
disp(a(20));
disp(a(20)-1.9)
isequal(a(20),1.9)
is returning:
1.9
2.22044604925031e-16
ans =
0
Any help ? I really need this isequal(a(20),1.9) to return 1...
thanks !
  2 件のコメント
Ambroise
Ambroise 2015 年 7 月 10 日
actually other values have a imprecision of n*eps, sometimes n=1, or n=8...

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

採用された回答

bio lim
bio lim 2015 年 7 月 10 日
Try it like this.
a=(0:1200)/10;
disp(a(20));
disp(a(20)-1.9);
isequal(a(20),1.9)
Your previous code was not returning 1 because of rounding errors when doing finite precision arithmetic.
  3 件のコメント
Ambroise
Ambroise 2015 年 7 月 10 日
and actually a=(0:1200)*0.1;
disp(a(20));
disp(a(20)-1.9);
isequal(a(20),1.9)
doesnt work but this works
a=(0:1200)/(1/0.1);
disp(a(20));
disp(a(20)-1.9);
isequal(a(20),1.9)
bio lim
bio lim 2015 年 7 月 10 日
編集済み: bio lim 2015 年 7 月 10 日
If you multiply it by decimals, such as 0.1, again you get rounding errors. That is why, I specifically wrote 10 in the first place. If you actually check your initial code, you can see that until a(4), it returns 0 but starts getting rounding error from that point.
1/0.1 returns 10 because, 1 is defined and when you divide you are going to get 10 without a rounding error.

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

その他の回答 (2 件)

Thorsten
Thorsten 2015 年 7 月 10 日
編集済み: Thorsten 2015 年 7 月 10 日
Use
a = linspace(0, 120, 1201);
But in general don't use
a(20) == 1.9
but
abs(a(20) - 1.9) <= eps
If you don't want to do it this way, just define
a(20) = 1.9;

Steven Lord
Steven Lord 2015 年 7 月 10 日
See question 1 in the Mathematics section of the FAQ for a more detailed explanation of this behavior.

カテゴリ

Help Center および File ExchangeMatrices and Arrays についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by