Minute error in array causes == to be ineffective
    4 views (last 30 days)
  
       Show older comments
    
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?
0 Comments
Accepted Answer
  Wayne King
    
      
 on 26 Jul 2012
        
      Edited: Wayne King
    
      
 on 26 Jul 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)
0 Comments
More Answers (1)
See Also
Categories
				Find more on Startup and Shutdown in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

