Ở đây chúng ta sẽ xem cách so sánh hai dữ liệu dấu phẩy động hoặc hai dữ liệu kép bằng C hoặc C ++. So sánh dấu phẩy động / kép không tương tự với so sánh số nguyên.
Để so sánh hai giá trị dấu phẩy động hoặc giá trị kép, chúng ta phải xem xét độ chính xác của phép so sánh. Ví dụ:nếu hai số là 3,1428 và 3,1415, thì chúng giống nhau đến độ chính xác 0,01, nhưng sau đó, chẳng hạn như 0,001, chúng không giống nhau.
Để so sánh bằng cách sử dụng tiêu chí này, chúng tôi sẽ tìm giá trị tuyệt đối sau khi trừ một số dấu phẩy động cho một số khác, sau đó kiểm tra xem kết quả có nhỏ hơn giá trị chính xác hay không. Bằng cách này, chúng tôi có thể quyết định rằng chúng có tương đương hay không.
Ví dụ
#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; } }
Đầu ra
They are equivalent They are not equivalent They are not equivalent They are equivalent