Why doesn't the less than operator work inside a for loop for decimals

Im trying to get the following code to work. but every time the value of x goes below 0.6 even though it an if condition is set to prevent it..can someone help
x=0.8;
for n=1:10
if (x>0.6)
x=x-0.1;
end
x
end

 채택된 답변

James Tursa
James Tursa 2018년 7월 18일
편집: James Tursa 2018년 7월 18일
Floating point arithmetic effects. See this link for starters:
For your specific example,
>> x = 0.8
x =
0.8000
>> num2strexact(x)
ans =
0.8000000000000000444089209850062616169452667236328125
>> x = x - 0.1
x =
0.7000
>> num2strexact(x)
ans =
0.70000000000000006661338147750939242541790008544921875
>> x = x - 0.1
x =
0.6000
>> num2strexact(x)
ans =
0.600000000000000088817841970012523233890533447265625
>> num2strexact(0.6)
ans =
0.59999999999999997779553950749686919152736663818359375
>> x > 0.6
ans =
1
So, the successive subtractions of 0.1 don't get you exactly to the value you were expecting. The decimal fractions you are using can't even be represented exactly in IEEE double arithmetic anyway. You need to use different logic in your looping. E.g.,
y = 8; % 8 can be represented exactly in IEEE double
for n=1:10
if( y > 6 )
y = y - 1; % This subtraction will be done exactly in IEEE double
end
x = y / 10; % Now calculate the x value to use downstream
:
end

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

질문:

2018년 7월 18일

댓글:

2018년 7월 19일

Community Treasure Hunt

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

Start Hunting!

Translated by