Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C/C++에서 float 및 double 비교를 위한 가장 효과적인 방법은 무엇입니까?

<시간/>

여기서는 C 또는 C++를 사용하여 두 개의 부동 소수점 데이터 또는 두 개의 이중 데이터를 비교하는 방법을 살펴보겠습니다. 부동 소수점/이중 비교는 정수 비교와 유사하지 않습니다.

두 개의 부동 소수점 또는 이중 값을 비교하려면 비교의 정밀도를 고려해야 합니다. 예를 들어 두 숫자가 3.1428과 3.1415이면 정밀도 0.01까지는 같지만 그 이후에는 0.001처럼 같지 않습니다.

이 기준을 사용하여 비교하려면 부동 소수점 수에서 부동 소수점 수를 빼서 절대값을 찾은 다음 결과가 정밀도 값보다 작은지 여부를 확인합니다. 이것으로 우리는 그것들이 동등한지 아닌지를 결정할 수 있습니다.

예시

#include <iostream>
#include <cmath>
using namespace std;
bool compare_float(float x, float y, float epsilon = 0.01f){
   if(fabs(x - y) < epsilon)
      return true; //they are same
      return false; //they are not same
}
bool compare_float(double x, double y, double epsilon = 0.0000001f){
   if(fabs(x - y) < epsilon)
      return true; //they are same
      return false; //they are not same
}
int main() {
   float x, y;
   x = 22.0f/7.0f;
   y = 3.1415f;
   if(compare_float(x, y)){
      cout << "They are equivalent" << endl;
   } else {
      cout << "They are not equivalent" << endl;
   }
   if(compare_float(x, y, 0.001f)){
      cout << "They are equivalent" << endl;
   } else {
      cout << "They are not equivalent" << endl;
   }
   double a, b;
   a = 2.03547415;
   b = 2.03547428;
   if(compare_float(a, b)){
      cout << "They are equivalent" << endl;
   } else {
      cout << "They are not equivalent" << endl;
   }
   if(compare_float(a, b, 0.000001f)){
      cout << "They are equivalent" << endl;
   } else {
      cout << "They are not equivalent" << endl;
   }
}

출력

They are equivalent
They are not equivalent
They are not equivalent
They are equivalent