if within while loop not recognized
1 次查看(过去 30 天)
显示 更早的评论
while(t<0.1)
if(t==0.05) v=3; end % NOT GETTING REFLECTED IN v
t=t+Ts;
end
0 个评论
采纳的回答
更多回答(1 个)
John D'Errico
2018-4-2
NEVER test for exact equality of a floating point number.
Since doubles are stored in binary, remember that almost all decimal fractions cannot be represented exactly as a double, just like you cannot represent 1/3 exactly as a terminating decimal in a limited number of decimal digits. Doubles use 52 binary bits to store the mantissa, so that is your limit.
Instead, 0.05 is stored as the closest value possible. So never test for exact equality. Just use a tolerance.
if abs(t - 0.05) < 1e-16
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!