BOJ - Skill) 실수의 동등 비교 코드

hyeok's Log·2022년 1월 24일
2

ProblemSolving

목록 보기
2/50
post-thumbnail
bool doubleEqual(double a, double b){
    double diff = fabs(a - b);
    
    if (diff < 1e-10) return true;	// 절대 오차가 허용 범위 안인 경우
    					// 그렇지 않은 경우엔,
    return diff <= 1e-8 * max(fabs(a), fabs(b));	// 상대 오차 사용

  IEEE 754 표준을 사용해 실수를 취급하는 C++에서는 IEEE 754의 부동소수점 표기법과 이진수의 특성에 의해 실수 비교 시 위와 같은 코드의 사용이 필요하다.

  일반적으로 32비트 크기 실수 자료형은 정확도가 높지 않으므로, 3D 모델링과 같이 상대적으로 부정확한 값을 사용해도 무방한 경우를 제외하고는 64비트 크기 실수 자료형만을 사용토록 하자.

  64비트 크기 자료형의 경우, 부호 비트는 당연히 한 개이고, Exponent는 11개, Mantissa는 52개로 이루어져 있다.
~> 이때, 1.(mantissa) * 2^(exp) 꼴이므로, 이 방식이 표현할 수 있는 수의 범위 비트는 하나가 더 있다고 보면 된다. (맨 앞의 1)

0개의 댓글