- 在计算机中,浮点数在内存的存储方式和int型不同,浮点数在存储的时候会有舍入误差,所以不能直接在程序中直接比较两个浮点数相等,如果需要判断相等,则需要使用精度这个方式。
#includeint main(int argc, char *argv[]) { double a = 1.0 - 0.2; // 0.8 double b = 0.7 + 0.1; // 0.8 if(a == b) { std::cout << "equationn"; } std::cout << "endn"; return 0; }
上面的代码输出的结果是:
end
程序并不会输出equation,原因就是a跟b并不相等。这个计算机的舍入误差。如果需要比较两个数相等,则需要使用精度来进行判断。
示例代码:#includeint main(int argc, char *argv[]) { const double EPS = 1e-8; double a = 1.0 - 0.2; // 0.8 double b = 0.7 + 0.1; // 0.8 if(abs(a - b) < EPS) // 作差与精度进行比较 { std::cout << "equationn"; } std::cout << "endn"; return 0; }
上面的代码输出结果是:
equation end
输出的结果达到了预期。



