带有浮点迭代的循环

Loop with float iteration

本文关键字:循环 迭代      更新时间:2023-10-16

第一种情况

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

问题是,为什么在第二种情况下,即使我说(<=(他也不接受2有趣的是,如果我去掉=,输出会是一样的吗?

约束我必须使用浮点数据类型并且我想要使用<=操作员

因为0.2不完全适合浮点,并且在循环中会累积浮点错误。在我的电脑上累积10倍0.2是2.38419e-07高于2.0f

由于可能存在算术舍入错误,因此无法使用==比较浮点或双变量。您应该使用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;
}

当您使用float类型(float my_float = 12.4f;(时,也可以尝试使用lireral f