在我的程序中,我將特定座標放入列表中。但是,該算法有時會將相同的座標放入列表中兩次。爲了避免這種情況,我做的標準方法,通過在列表中的EPSILON值關閉所有位置比較x和y的值的絕對差:最小的EPSILON比較C中的雙變量?
bool doubleEqual(double x1, double y1, double x2, double y2){
if((fabs(x1-x2) < EPSILON) && (fabs(y1-y2) < EPSILON)){
return TRUE; // particle is already in list
}
return FALSE; // particle is not in the list
}
我有幾個問題:
1 )這個實現是否比較兩個粒子的位置是否正確?
2)我可以選擇EPSILON多小? (這些粒子可以非常接近)
3)比較粒子位置有沒有更快/更強大的實現?
如果您正在根據確切位置將某些東西放入列表中,那麼您使用的是整數概念。這基本上是你在用epsilons做的事情 - 削減了額外的精度,把雙重比較變成了一個整數比較。如果你想看到重疊,我假設他們有幾何邊界。檢查是否有碰撞。 –
'x1'和'x2'可以是'1e + 300'或'1e-300'。那他們的區別是什麼? –
'fabs(x1-x2)
chux