2017-12-05 7 views
-1

를 할 때 :matlab에 반올림 계산 오류의 MATLAB 2014b에서

round((0.1:0.2:1)/0.2) 

내가 얻을 :

1 2 3 3 5 

대신 같은 이상한 계산 문제를 해결하는 방법이 있나요

1 2 3 4 5 

의? 왜 이런 일이 일어나는가? 왜 그렇게 이상한가요? 이 값은 n=0.2뿐만 아니라 다른 값에 대해서도 반복됩니다.

편집 : 복제본을 확인했지만 ceil을 사용할 때 시나리오가 변경되므로 부동 소수점 임계 값이 반 정수 (0.5, 1.5, 2.5)가 아닌 정수 (1.0, 2.0, 3.0)로 표시됩니까? single 같은 다른 표현을 사용하면 어떨까요? 아니면 다른 어떤 예측 가능한가?

+3

'round ((0.1 : 0.2 + eps : 1) ./ 0.2)' – bla

+1

부동 소수점 정확도에 익숙 ... – bla

+0

['ceil'] (https://www.mathworks.com) /help/matlab/ref/ceil.html) 대신'round'를 사용하십시오. – gnovice

답변

1

질문이 다시 열렸 기 때문에 float로 1.3 + 0.2를 추가하면 2.49999999999 또는 2.5000000001 등이 될 수 있다고 간단히 언급 할 것입니다. round은 부동 소수점 오류에 따라 작동합니다.

+0

'ceil'가 오류를 수정했는데 이것이 명백한가요? 나는'ceil'이 실패 할 때를 발견 할 수 없다 ... – hyprfrcb