여기서는 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