使用 numpy,我試圖了解可以從 float64 向下轉換到 float32 的最大值是多少,而精度損失小于或等于 0.001。
由于在網上找不到簡單的解釋,所以我很快想出了這段代碼來測驗:
result = {}
for j in range(1,1000):
for i in range (1, 1_000_000):
num = i j/1000
x=np.array([num],dtype=np.float32)
y=np.array([num],dtype=np.float64)
if abs(x[0]-y[0]) > 0.001:
result[j] = i
break
根據結果??,似乎任何小于 32768 的正值都可以安全地從 float64 向下轉換為 float32,但精度損失可接受(考慮到 <=0.001 的標準)
它是否正確 ?有人可以解釋背后的數學嗎?
非常感謝
uj5u.com熱心網友回復:
假設 IEEE 754 表示,float32具有 24 位有效數字精度,而float64具有 53 位有效數字精度(“非正規”數字除外)。
為了表示一個絕對誤差最多為 0.001 的數字,您需要在二進制點右側至少 9 位,這意味著將數字四舍五入到最接近的 1/512 倍數,從而具有最大表示誤差略低于 1/1024 = 0.0009765625 < 0.001。
總共有 24 個有效位,二進制點右側有 9 個位,二進制點左側有 15 個位,它可以表示所有整數,最大為 2 15 = 32768,正如您通過實驗確定的那樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/451744.html
下一篇:如何將打字稿包拆分為多個子模塊?
