我正在努力解决一个基本的浮点精度问题。这是问题所在:
double d = 0.1;
d += 0.1;
d += 0.1;
d == 0.3 ? std::cout << "yes" : std::cout << "no";
运行代码,你得到“否”
我了解 C/C++ 以二进制形式存储值,并且二进制存储不能完全存储每个值。我也明白,当您对它们进行各种数学运算时,这些小错误会变得复杂(即 d += 0.1;)。
我的问题是我是否需要测试 d == 0.3 (达到合理的精度......正如上面代码的明确意图)......我该怎么做?我希望答案不是:
if (d > 0.2999 && d < 0.3001) ...
也..这行得通
float f = 0.1;
f += 0.1;
f += 0.1;
f == 0.3f ? std::cout << "yes" : std::cout << "no";
但我在该语言中找不到等效的“0.3d”。
谢谢