Why does this if statement fail?
1 回表示 (過去 30 日間)
古いコメントを表示
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 件のコメント
Stephen23
2020 年 9 月 7 日
編集済み: Stephen23
2020 年 9 月 7 日
"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
採用された回答
KSSV
2020 年 9 月 7 日
編集済み: KSSV
2020 年 9 月 7 日
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 件のコメント
Stephen23
2020 年 9 月 7 日
"In simpler cases like this, rounding to the first decimal also does the trick..."
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!