Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

So sánh số thực (floating point) trong C++ với epsilon


Không so sánh == trực tiếp do sai số biểu diễn. Dùng epsilon (ngưỡng sai số cho phép).

Hàm so sánh

bool equal(float a, float b, float eps = 0.01f) {
    return fabs(a - b) < eps;
}

Ví dụ

float x = 22.0f/7.0f; // ~3.142857
float y = 3.1415f;
equal(x, y);       // true (eps=0.01)
equal(x, y, 0.001f); // false

Lưu ý: cho double dùng epsilon nhỏ hơn (ví dụ 1e-9). C++20 có std::abs overload cho float/double.