2012-09-01 7 views
2

내 코드에서 벡터의 두 연속 멤버 사이의 차이 쌍이 동일하지 않거나 동등하지 않은지 확인한 다음 적절하게 처리해야합니다. 나는 그것이 나에게 양쪽이 동일한 경우에도 1을 제공Matlab에서 연산자가 이상하게 작동하지 않습니다.

(x(i+3) - x(i+2)) ~= (x(i+1)-x(i)) 

을 사용 그래서 때 두 개의 연속적인 숫자의 두 쌍의 경우 지금 여기에서 말하는 matlab에에서 일어나는 이상한 일이다. 나는 그 이유가 약간의 반올림 오류가 있지만 확실하지 않다고 생각한다. 예 :

x = [0,0.16,0.32,0.48,0.64,0.80]; 
>>a = x(5) - x(4) 

a = 

0.1600 

>>b = x(4) - x(3) 

b = 

0.1600 

>>a-b 

ans = 

5.5511e-17 

이 문제를 해결하는 방법은 무엇입니까? 이 문제에 대해 ~= 또는 == 운영자를 우회하는 다른 전략이 있습니까?

미리 감사드립니다.

+0

왜 비교중인 두 숫자의 차이가 '엡실론'보다 작은 지 확인하지 않으시겠습니까? – Ansari

답변

5

그런 식으로 부동 소수점 숫자를 비교해서는 안됩니다. 더 확실한 방법은 동등성을 테스트하는 경우 abs(a-b)<eps을 사용하는 것입니다.

+0

감사합니다. Matlab에 기계 정밀도가 가장 낮은 매크로가 있다는 것을 몰랐습니다. – as3rdaccount

+2

@ArunavDev MATLAB에는 매크로가 없으며 [eps] (http://www.mathworks.com/help/techdoc/ref/eps.html)는 함수입니다. – Praetorian

+2

다음과 같은 테스트를 권장합니다 : 최상의 결과를 얻으려면 abs (a-b) <10 * eps (a). –

관련 문제