C++中float与double的比较:如何避免精度损失导致的错误?
大家好。我是一名初学C++的开发者,在比较浮点数时遇到了问题。我正在编写一个模拟物理过程的程序,需要检查两个float或double类型的数是否相等。
问题在于,由于计算误差(例如,0.1 + 0.2 不等于 0.3),直接使用 `==` 进行比较几乎总是失败:
```cpp
#include
int main() {
double a = 0.1 + 0.2;
double b = 0.3;
if (a == b) {
std::cout << "相等" << std::endl;
} else {
std::cout << "不相等" << std::endl; // 输出这个
}
return 0;
}
```
我读到过需要用某个“epsilon”(容差)进行比较,但不知道如何正确选择这个值。例如,对于某些数 `1e-6` 适用,但对其他数则不适用。有没有通用的方法?如何考虑float和double具有不同精度?如果数值非常大或非常小该怎么办?
希望能得到详细的解释。