다음 코드를 사용하여 dt * j가 정수 인 경우 결과를 저장하기 위해 Matlab을 사용하려고했습니다. .matlab mod() 함수가 잘못된 답을 제공합니다.
j=1;
dt = 1E-05;
a=[];
while dt*j <=20
if mod(dt*j,1) ==0
a=[a;[dt*j,j]];
end
j=j+1;
end
그러나 Matlab은 잘못된 결과를 제공합니다. 아래에 표시된 것처럼 일부 정수 (3,6,7,11 등 ...)가 누락되었습니다.
a =
1 100000
2 200000
4 400000
5 500000
8 800000
9 900000
10 1000000
16 1600000
17 1700000
18 1800000
19 1900000
20 2000000
dt = 1E-4를 사용하여 다시 시도했으며 올바른 결과를 제공합니다. 아무도 여기서 무슨 일이 일어나는지 말해 줄 수 없습니까? 고맙습니다.
부동 소수점 정밀도 오류의 또 다른 예입니다. 틀린 것은 아니다.'dt * j'는 정확하게 기대 값이 아니다. – Daniel
예, dt * 300000 == 3 ans = 0, dt * 400000 == 4, ans = 1 일부 숫자 만 빠져 있기 때문에 혼란 스러웠습니다. 그러나 컴퓨터 상점 번호와 관련이 있다고 생각합니다. – user3413078
부동 소수점 질문입니다. 산수. 몇 가지 문제점이 있습니다. http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – Daniel