【发布时间】:2013-01-29 08:56:10
【问题描述】:
我正在编写一个以浮点数递增的循环,但我遇到了以下示例所示的浮点算术问题:
for(float value = -2.0; value <= 2.0; value += 0.2)
std::cout << value << std::endl;
这是输出:
-2
-1.8
-1.6
-1.4
-1.2
-1
-0.8
-0.6
-0.4
-0.2
1.46031e-07
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
为什么我得到的是1.46031e-07 而不是0?我知道这与浮点错误有关,但我无法理解为什么会发生这种情况以及我应该做些什么来防止这种情况发生(如果有办法的话)。有人可以解释(或指向我的链接)以帮助我理解吗?任何输入表示赞赏。谢谢!
【问题讨论】:
-
“如何避免浮点算术错误”——你不能,抱歉。
-
这个问题已经被问过很多次了
-
0.2不能用float精确表示(假设 IEEE754 浮点运算)。如果你提高输出的精度,你可以看到这一点:example。
标签: c++ floating-point floating-point-precision