Why does this if statement fail?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Renat Yakupov
el 7 de Sept. de 2020
Comentada: Stephen23
el 7 de Sept. de 2020
I have noticed this strange behavior and I just can't figure why this is happening.
I have a script looping through a certain parameter and then saving some output results for certain values of that parameter. The relevant part of the script is:
for Thr=0.4:0.1:0.7
disp(Thr);
if Thr==0.5
disp('but I am here?');
end
if Thr==0.6
disp('am i here?');
end
end
>>
0.4000
0.5000
but I am here?
0.6000
0.7000
For some reason, it the if statement doesnt recognize Thr value of 0.6. If I use a step of 0.01, same happens for Thr values of 0.59, 0.58 and 0.57. I didnt test much further than that.
What is happening here?
2 comentarios
Stephen23
el 7 de Sept. de 2020
Editada: Stephen23
el 7 de Sept. de 2020
"What is happening here?"
etc. etc.
This is worth reading as well:
PS: do not test binary floating point numbers for exact equivalence.The correct approach is to compare the absolute difference against a tolerance (chosen to be suitable for your data magnitudes):
abs(A-B)<tol
Respuesta aceptada
KSSV
el 7 de Sept. de 2020
Editada: KSSV
el 7 de Sept. de 2020
for Thr=0.4:0.1:0.7
disp(Thr);
if abs(Thr-0.5)<10^-3
disp('but I am here?');
end
if abs(Thr-0.6)<10^-3
disp('am i here?');
end
end
Read about comparing floating point numbers. It seems you are checking some options, you need not to do this. Please read abour debugging MATLAB files.
2 comentarios
Stephen23
el 7 de Sept. de 2020
"In simpler cases like this, rounding to the first decimal also does the trick..."
Más respuestas (0)
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!