带有浮点迭代的循环
Loop with float iteration
第一种情况
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
。
相关文章:
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- 使用基于范围的循环迭代矢量时出现问题
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- 在分配和发布递增循环迭代器时C++无限循环(gcc 错误?
- 如何基于循环迭代器选择函数
- 如何使用基于范围的for循环迭代Rapidjson文档(它本身就是一个JSON数组)
- 在循环迭代期间将引用保存到矢量中的空指针
- 在每次循环迭代时停止代码执行毫秒
- 优先级队列(使用 pairs<int,int> ) 根据 for 循环迭代器的顶级元素
- 如何在每次循环迭代期间生成向量,存储数据,然后删除该向量?
- 先前循环迭代对当前迭代执行时间的影响
- C++使用 for 循环迭代 2 个向量
- 为什么循环迭代不打印任何东西?
- 每次循环迭代后递减迭代器都会显示出奇怪的行为
- 虽然循环迭代了C++中的太多元素
- 循环迭代后,C 函数调用不会再次调用
- 指向向量和向量的指针中的循环迭代
- 为矩阵创建动态数组,以循环迭代器命名
- for 循环 - 迭代特定元素
- 通过线程分发循环迭代