克服浮點數的精確度問題
浮點數是計算中廣泛使用的資料類型,由於存在潛在的精確度問題它們在機器中的內在表徵。為了說明這個問題:
#include <stdio.h> #include <stdlib.h> int main() { char *str = "4.600"; double mw = atof(str); float p = 0.2; float g = 0.2; int h = 1; int columns = (int)((mw - (h * 11 * p)) / ((h * 11 * p) + g)) + 1; printf("%f\n", (mw - (h * 11 * p)) / ((h * 11 * p) + g)); printf("Columns: %d\n", columns); return 0; }
在此程式碼中,str 是「4.600」的字串表示形式,呼叫 atof(str) 將其轉換為 double mw。隨後的計算產生了一個不幸的結果:4.5999999999999996 的浮點表示形式無法精確表示所需值 4.600。
解決問題
如解決方案所突出顯示,用浮點運算實現精確相等實際上是不可能的。相反,最好比較可接受範圍內的數值。在某些情況下,必須認識到特定值無法準確表示為浮點數。
推薦資源
更多見解,請參閱以下參考資料:
以上是我們如何克服浮點運算的精確度問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!