Minute error in array causes == to be ineffective

1 回表示 (過去 30 日間)
random09983492
random09983492 2012 年 7 月 26 日
Hi, I am trying to use an if statement using the == comparator to search an array of numbers. Something like this:
for i = 1:100
if a == array(i,1)
% do stuff here
end
end
Doing this, however, leads to the if statement never being true. When I would expect a and the array value to be equal, the statement is still false, due to a very minute difference of something around the order of 10^-8.
What is causing this very small error and what are some of the workarounds you guys suggest? Alternatively, is there a smarter way to search an array of numbers?

採用された回答

Wayne King
Wayne King 2012 年 7 月 26 日
編集済み: Wayne King 2012 年 7 月 26 日
Hi Elliot, this is a reality of dealing with floating point numbers. You could use a tolerance
a = randn(10,1);
for ii = 1:length(a)
if (abs(a(ii)-0)<1e-6)
disp('true');
else
disp('false');
end
end
For example
x = 1+1e-7;
y = 1.000000;
They look the same, but
abs(x-y)<1e-6
returns a 1 (true)

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2012 年 7 月 26 日

カテゴリ

Help Center および File ExchangeWhos についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by