So sánh biến float và biến kép phụ thuộc vào mục tiêu cuối cùng của bạn là gì. Nếu bạn muốn một hàm có thể chạy được mà không cần đi quá nhiều chi tiết và sẽ không gặp vấn đề trong một số tính toán không chính xác, bạn có thể sử dụng hàm sau -
Ví dụ
#include<iostream> using namespace std; // Define the error that you can tolerate #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); }
đầu ra
Điều này sẽ cung cấp đầu ra -
1 0
Hàm này nhận khả năng chịu lỗi của bạn và kiểm tra xem ngưỡng có lớn hơn sự khác biệt giữa các số bạn đang so sánh hay không. Nếu bạn cần thứ gì đó chính xác hơn nhiều, tốt hơn hết bạn nên đọc bài đăng trên blog tuyệt vời này:https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/