【发布时间】:2013-05-11 10:30:31
【问题描述】:
我正在努力解决一个基本的浮点精度问题。问题来了:
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”。
谢谢
【问题讨论】:
-
我们又来了...阅读此内容:docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
-
因为它不精确。搜索浮点表示
标签: c++ c floating-point