如何在for循环中增加:
for (int j = 0; j < 1.0; j+=0.01) {}
我立即知道有一个小数点可以使用int
奇数。
修改
在任何人变得厚颜无耻之前,我已经知道int
是不正确的...问题是如何执行该方法,因为int
不是一种有效的方式。
答案 0 :(得分:9)
我建议不要这样做,而是使用整数。 Floating point math is weird并且可以为您提供不受欢迎的结果。以您的范围为例,我们可以使用
for (int i = 0; i < 100; ++j)
{
double step = static_cast<double>(i) / 100;
}
这可以保证我们获得100次迭代,但仍允许您获得小数&#34;步骤&#34;每次迭代。
答案 1 :(得分:3)
使用double
并接受累积错误,或以固定点形式使用int
,这样您就可以在每个循环上计算更准确的值。
使用double
:
for (double j = 0; j < 1.0; j+=0.01) {}
使用固定点获得最大准确度:
for (int i = 0; i < 100; ++i) {
double j = i / 100.0;
}
答案 2 :(得分:1)
使用浮点类型而不是整数类型。
for (float j = 0; j < 1.0; j+=0.01) {}
或
for (double j = 0; j < 1.0; j+=0.01) {}
答案 3 :(得分:1)
由于j
的类型为int
,因此对其执行的任何算术运算的结果都将被截断为整数值。所以那些增量将没有任何效果。如果您将j
的类型更改为double
,则会更像您期望的那样。但请记住,0.01不能完全表示为IEEE浮点值(这是您的硬件几乎肯定会使用的)。