티스토리 뷰

728x90

// 쉽게 풀어쓴 C언어 Express p.187 참고

 

컴퓨터의 한정된 비트로 실수를 표현하면 오차가 발생한다.

실수를 표현하는 방식인 부동 소수점은 유효숫자의 개수에 제한을 가지기 때문에 아주 큰 수와 아주 작은 수를 더하면, 작은 수가 사라지기도 한다.

 

예를 들어 아래의 수식은 양쪽의 값이 같은 것으로 간주되어 거짓이 될 수 있다.

(1e32+0.01) > 1e32  

 

그 이유는 다음과 같다. double형의 유효숫자는 16자리인데, 1e32+0.01 같은 수를 마지막 자리까지 가지고 있으려면 30자리가 넘는 유효숫자가 있어야 한다.

 

따라서 실수값을 올바르게 비교하려면 다음과 같이 비교해야 한다.

(fabs(x-y) < 0.0001)

fabs()는 실수값의 절대값을 구하는 함수이다.

 

 

// 쉽게 풀어쓴 C언어 Express p.187 참고

 

부동소수점 수 2개가 같은지를 확인하고 싶을 때

if ( x == y ) { ... }

위와 같은 비교는 문제가 될 수 있으므로, 다음과 같이 오차를 감안하여 비교해야 한다.  

if (fabs(x-y) < 0.00001) { ... }

2개의 숫자가 오차 이내로 아주 근접하면 같은 것으로 판정하는 방법이다. 

728x90