由于浮点数使用IEEE754表示方法,无法精确比较2个浮点数是否相等,可能有精度丢失等问题,好的写法如下:
#include <limits>
#include <cmath>
#include <iostream>
int main() {
double a = 0.00001;
double b = 0.000011;
// 获取double类型的机器epsilon
double eps = std::numeric_limits<double>::epsilon();
if (fabs(a - b) < eps) {
std::cout << "a = b " << std::endl;
} else {
std::cout << "a != b " << std::endl;
}
return 0;
}
如果希望在编译阶段检查此类问题,可以设置编译选项如下:
// 设置warning提醒
-Wfloat-equal
// 设置error提醒
-Werror=float-equal
252

被折叠的 条评论
为什么被折叠?



