我要熬这个问题降低到最简单的形式:
让我们从[0 .. 5.0]进行迭代以0.05的步骤,并打印出“X”为每0.25乘数。
for(double d=0.0; d<=5.0; d+=0.05) {
if(fmod(d,0.25) is equal 0)
print 'X';
}
当然,这是不行的,因为d
将[0,0.05000000001,0.100000000002 ...]造成FMOD()失败。 极端的例子是当d=1.999999999998
和fmod(d,0.25) = 1
。
如何解决呢? 这里是一个编辑的在线例子。
我会简单地以这种方式不使用浮点变量解决这个问题:
for (int i = 0; i <= 500; i += 5) {
double d = i / 100.0; // in case you need to use it.
if ((i % 25) == 0)
print 'X';
}
他们通常是有问题的,以至于它值得一点点额外的努力避免他们。
在你总是有相同的固定小数的情况下,简单地乘以你的循环计数器(20在这种情况下)。 当您想通过20来访问它作为一个双,鸿沟实际上,您使用的是隐藏的指数,让您的双整数。
在该示例中,我使用的整数为一个循环计数器,假设它具有所要求的精度。
for(int i=0; i<=100; i+=1) {
if(i % 5 == 0)
print 'X';
double d = (double)i / 20.0;
// use d
}