循环浮动迭代

时间:2014-07-03 09:07:43

标签: c++ loops floating-point

第一种情况

for (int i = 0 ; i <=2 ; i++)
{
    cout << i << endl ;
}

输出:

1
2

第二种情况

for (float i = 0 ; i <= 2 ; i+=.2)
{
    cout << i << endl;
}

输出

1
1.2
1.4
1.6
1.8

问题是为什么在第二种情况下,即使我说(&lt; =),他也没有采取2 而有趣的是,如果我删除=输出将是相同的?

约束 我必须使用 float DataType 我想使用&lt; = 运算符

2 个答案:

答案 0 :(得分:1)

因为0.2并不完全适合浮点数并且在循环中累积浮点错误。在我的计算机上累计10次0.2是2.38419e-07高于2.0f

答案 1 :(得分:0)

由于可能的算术舍入错误,您无法使用==比较浮点或双变量。你应该使用epsilon。

const float EPSILON = 0.00001f;
for (float f = 0.0f; EPSILON > std::fabs(f - 2.0f); f += 0.2f)
{
std::cout << f << std::endl;
}

当您使用浮点类型(f)时,请尝试使用lireral float my_float = 12.4f;