Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 float와 double을 비교하는 올바른 방법

C++에서 floatdouble 같은 부동소수점(floating-point) 변수를 비교하는 방식은 작업의 최종 목표에 따라 달라집니다. 부동소수점 연산은 본질적으로 미세한 오차를 포함할 수 있기 때문에, 단순히 == 연산자로 비교하면 의도치 않은 결과가 나올 수 있습니다.

세부적인 이론까지 깊이 파고들지 않으면서, 어느 정도의 계산 오차를 감수할 수 있는 간단하고 바로 실행 가능한 함수가 필요하다면 아래 코드를 사용해 보세요.

예제 코드

#include<iostream>
using namespace std;

// 허용 가능한 오차 정의
#define EPSILON 0.000001

bool areSame(double a, double b) {
    return fabs(a - b) < EPSILON;
}

int main() {
    double a = 1.005;
    double b = 1.006;
    cout << areSame(a, a);
    cout << areSame(a, b);
}

출력 결과

위 코드를 실행하면 다음과 같은 출력을 얻습니다.

1
0

코드 설명

이 함수는 허용 가능한 오차 범위(EPSILON)를 기준으로, 비교하려는 두 숫자의 차이가 그 임계값보다 작은지 검사합니다. 즉, 두 값의 차이가 설정한 오차 한계 안에 들어오면 '같다'고 판단하는 방식입니다.

위 예제에서는 동일한 값끼리 비교했을 때 1(참), 서로 다른 값끼리 비교했을 때 0(거짓)이 출력됩니다.

만약 훨씬 더 높은 정확도가 필요하다면, Bruce Dawson이 작성한 뛰어난 블로그 글을 참고하는 것이 좋습니다: Comparing Floating Point Numbers, 2012 Edition