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.