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 CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

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

Start Hunting!

Translated by