Tag: 精密

如何使用fmod并避免精度问题

我将把这个问题归结为最简单的forms: 让我们以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'; } 这当然不起作用,因为d将是[0,0.05000000001,0.100000000002,…]导致fmod()失败。 极端的例子是当d=1.999999999998和fmod(d,0.25) = 1 。 如何解决这个问题? 这是一个可编辑的在线示例。