フィルターのクリア

if within while loop not recognized

1 回表示 (過去 30 日間)
Ramu Nair R
Ramu Nair R 2018 年 4 月 2 日
編集済み: Ramu Nair R 2018 年 4 月 2 日
while(t<0.1)
if(t==0.05) v=3; end % NOT GETTING REFLECTED IN v
t=t+Ts;
end

採用された回答

Birdman
Birdman 2018 年 4 月 2 日
編集済み: Birdman 2018 年 4 月 2 日
A trivial answer:
Use ismembertol for comparing values with tolerance
tol=1e-6;
if ismembertol(t,0.05,tol)

その他の回答 (1 件)

John D'Errico
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

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

タグ

製品

Community Treasure Hunt

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

Start Hunting!

Translated by