即時編程c中的物理(蒙特卡羅自旋磁場)模擬,遇到了一種奇怪的問題。 一個if語句只適用於某個變量的某個值。我試圖做的是,我有一個變量(bh,外部磁場),具有一定的初始值。我繼續降低它,直到它在10步內達到-bh,然後它應該開始增加,直到它再次達到+ bh,直到迭代結束。 這工作正常bh = .3,但如果我將它設置爲.1,2或1它不起作用。它開始下降,但不會停止,直到模擬結束。我的程序中沒有其他值等於.3!a if語句只能以某些值運行
我不確定要包含什麼,因爲主程序有點長。但代碼片段(無主迴路,但包括調試回聲):
float bh; float bmax;
bh=.3; bmax=bh;
if (bup==1) {
printf("BUP=1, BFeld = %.2f\n",bh);
bh = bh + bmax/10;
if (bh == bmax) { bup=0; }
}
if (bup==0) {
printf("BUP=0, BFeld = %.2f, %.2f = bmin\n",bh,-bmax);
bh = bh - bmax/10;
if (bh == -bmax) { bup=1; }
}
=我所得到的在調試輸出方面是BH 0.3
[...]
BUP=0, BFeld = -0.24, -0.30 = bmin
BUP=0, BFeld = -0.27, -0.30 = bmin
BUP=1, BFeld = -0.30
BUP=1, BFeld = -0.27
BUP=1, BFeld = -0.24
[...]
但是,當我設置BH 1,我得到
[...]
BUP=0, BFeld = -0.80, -1.00 = bmin
BUP=0, BFeld = -0.90, -1.00 = bmin
BUP=0, BFeld = -1.00, -1.00 = bmin
BUP=0, BFeld = -1.10, -1.00 = bmin
BUP=0, BFeld = -1.20, -1.00 = bmin
BUP=0, BFeld = -1.30, -1.00 = bmin
[...]
所以我的調試輸出,甚至給了我行「...- 1.00,-1.00 ...」,但不知何故ç認爲對方不等於‘足夠’到BUP設置爲1 。 我做錯了什麼?
由於內部舍入,不要比較浮點數是否相等。 – Duck
請仔細閱讀我答案下的評論,他們提供了一些非常有用的建議。 –