BOJ - Skill) 실수의 동등 비교 코드
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)
Author And Source
이 문제에 관하여(BOJ - Skill) 실수의 동등 비교 코드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@junttang/BOJ-Skill-실수의-동등-비교저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)