2014-11-05 4 views
2

Matlab이 floor(5-eps) < 5을 false로 평가한다는 것은 불합리한 것처럼 보입니다. 실제로 심지어 floor(5-2*eps) < 5도 false입니다.바닥 (5 - 2 * eps) <5가 왜 틀립니까?

eps은 약 1e-16이므로 버그라고 생각합니다. 최소값보다 멀리 떨어져 있습니다. Matlab이 거짓을 반환하는 특별한 이유가 있습니까? 거기에 무슨 생각이야?

+3

'eps '를'eps (5)'로 바꾸어보고 무슨 일이 일어나는 지보십시오. –

+0

@HighPerformanceMark : +1 방금 당신의 의견을 보았습니다. 괜찮습니다. :) – Amro

+0

고마워요, 방금 당신의 의견을 보았습니다, 나는 eps가 논쟁을했다는 것을 몰랐습니다! 나는 SO가 나를 허용 할 때 아래에 답을 표시 할 것이다. – Sheljohn

답변

4

당신은 단지 eps

X. 같은 정밀도의 다음 크기가 큰 부동 소수점 수

EPS (X) ABS (X)에서 긍정적 거리가

, eps(x)를 사용하려면 당신이 xx+eps(x)의 HEX 표현을 비교한다면

사실, 일반적으로 그들은 가수에 하나의 비트 차이해야합니다

>> format hex 
>> x = 5 
x = 
    4014000000000000 
>> x + eps(x) 
ans = 
    4014000000000001 
+0

'x + eps (x)'의 지나친 단순화는 다음과 같을 것입니다 :'typecast (typecast (x, 'uint64') + 1, 'double')'(분명히 항상 작동하지는 않을 것입니다) – Amro