可能重复:
Why “for(i = 0.1 ; i != 1.0 ; i += 0.1)” doesn’t break at i = 1.0?双精度比较失败
我有一个数字(真实)区间[X,Y]。我必须使用类似遍历它:
nr = 0;
for (i = x; i <= y; i += step) //step is a small double value
nr++;
为[-1,1]与0.001的步骤,显然NR应为2001年(-1.000 0.999 ... 1.000),但它计算NR = 2000 (我调查过,最后一次比较失败:0.999 + 0.001> 1.000)
我该如何计算确切的nr值?
'float' /'double'本质上是不精确的;如果您需要“确切”,请使用整数类型 – Kevin
您真的只需要计算步数,还是会在循环体中有更多?它将会是什么? –
nr表示映射到真实平面上的图像的高度。我计算for(s)中的一些像素值。我知道完全不可能计算nr,所以我会坚持“height =(int)((y - x)/ step)。 – kaspersky