Loop Trough Time t = t+dt
    조회 수: 2 (최근 30일)
  
       이전 댓글 표시
    
I have a simple code like this
t = 1380;
dt = 0.1
for i = 1:1000
    t = t+dt;
    disp(t)
end
I believe the answer should be obvious that the final answer should be 
t = 1480. I dont know why Matlab shows the answer a little bit different which is 1479.99999999991.
Anyone know why?
댓글 수: 0
답변 (1개)
  Star Strider
      
      
 2019년 11월 13일
        You have encountered floating-point approximation error.  
댓글 수: 3
  Star Strider
      
      
 2019년 11월 18일
				Yes.  
Change it to: 
if abs(t - 1400) < 0.05
    a = 2
end
Since the code counts up by ‘dt’, this will introduce a tolerance in the calculation, so the floating-point approximation error are taken into account.  
To see this graphically: 
t = linspace(1399, 1401);
figure
plot(t, (abs(t - 1400) < 0.05))
grid
That will show the effect of using the inequality to test for a range of values for ‘t’ near 1400.   
Experiment to get the result you want.  
  darova
      
      
 2019년 11월 18일
				Don't use equal sign for float numbers
if abs(t-1400) < 1e-6    % tolerance
    a = 2;
end
참고 항목
카테고리
				Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


