我有這個循環這應該迭代lx
倍超過x(範圍[-1,1])和ly
倍y(範圍[-1,1]),9倍總共,但它重複了16次!爲什麼是這樣??浮點循環運行更多的迭代比應該
#include <stdio.h>
int main(void) {
double lx=3,ly=3;
double du = (1-(-1))/double(lx);
double dv = (1-(-1))/double(ly);
int count=0;
for (double y=-1; y < 1; y += dv)
for (double x=-1; x < 1; x += du) {
count++;
}
printf("\n\n%d lss\n", count);
}
因爲浮點運算不準確。你得到一個值(例如)y = 0.99999999999999,所以y <1是真的,並且你的循環執行了太多次。 – john
它不能那麼不準確!我沒有在這裏處理無窮小數量。有趣的是,如果我設置lx = ly = 4,循環仍然運行4x4 = 16次! – Suffern
@Suffem:是的,它可能是不準確的。當你用二進制浮點計算'2./3'時,**結果不是2/3 **。它稍微少一些,這就是所有需要使'y'的值略小於1的地方,你可能預期爲1. –