我不知道這是否是一個明顯的錯誤,但在運行Python腳本來改變模擬參數時,我意識到delta = 0.29和delta = 0.58的結果丟失。關於調查,我注意到以下Python代碼:使用浮點數的Python四捨五入錯誤
for i_delta in range(0, 101, 1):
delta = float(i_delta)/100
(...)
filename = 'foo' + str(int(delta * 100)) + '.dat'
生成相同文件,δ= 0.28和0.29,與相同和0.57 0.58,其原因在於蟒返回浮動(29)/ 100作爲0.28999999999999998 。但這不是一個系統性的錯誤,並不在於它發生在每一個整數上。所以我創建了以下Python腳本:
import sys
n = int(sys.argv[1])
for i in range(0, n + 1):
a = int(100 * (float(i)/100))
if i != a: print i, a
而且我看不到任何發生此舍入錯誤的數字模式。爲什麼這些特定數字會發生這種情況?
這就是IEEE 754浮點數的工作原理。我建議你輪迴把浮動變回一個整數,而不是簡單地截斷。 – 2011-05-13 19:50:52
這不是一個錯誤 - 它在很多不同的語言中都很常見。有一些步驟,但在這種情況下,最簡單的解決方案可能只是在文件名中使用idelta。請記住,默認情況下,idelta不會傳遞到循環外部。 – Tadeck 2011-05-13 19:56:52
#StdSOAnswer_1。這就是浮點的工作原理。 – 2011-05-13 21:27:20