Pri*_*alj 1 c precision double-precision modulus
我将把这个问题归结为最简单的形式:
让我们以0.05的步长从[0 .. 5.0]迭代,并为每0.25乘法器打印出'X'.
for(double d=0.0; d<=5.0; d+=0.05) {
if(fmod(d,0.25) is equal 0)
print 'X';
}
Run Code Online (Sandbox Code Playgroud)
这当然不起作用,因为d[0,0.0500000000001,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';
}
Run Code Online (Sandbox Code Playgroud)
它们通常存在问题,因此在避免它们方面需要额外的努力.