我将把这个问题归结为最简单的形式:
让我们从 [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
and fmod(d,0.25) = 1
.
如何解决这个问题?Here is一个可编辑的在线示例。
我会通过不以这种方式使用浮点变量来解决这个问题:
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';
}
它们通常会带来很多问题,因此值得付出额外的努力来避免它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)