Minute error in array causes == to be ineffective

3 visualizaciones (últimos 30 días)
random09983492
random09983492 el 26 de Jul. de 2012
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?

Respuesta aceptada

Wayne King
Wayne King el 26 de Jul. de 2012
Editada: Wayne King el 26 de Jul. de 2012
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)

Más respuestas (1)

Walter Roberson
Walter Roberson el 26 de Jul. de 2012

Categorías

Más información sobre Startup and Shutdown en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by