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

Cách so sánh float/double hiệu quả nhất trong C/C++


Tương tự bài ID 1003082269 nhưng bao gồm cả double với epsilon nhỏ hơn.

Hàm template so sánh

template<typename T>
bool approx_equal(T a, T b, T eps) {
    return std::abs(a - b) < eps;
}

// dùng
approx_equal(22.0/7.0, 3.1415, 0.01);       // float
approx_equal(2.03547415, 2.03547428, 1e-7); // double

Best practice: epsilon tỷ lệ với magnitude (relative epsilon) cho số lớn. Tham khảo Comparing Floating Point Numbers của Bruce Dawson.