[英]Error in astype float32 vs float64 for integer
我確信這是由於我對如何在不同的浮點精度之間進行投射的理解失效,但是有人可以解釋為什么在32比64位表示中,該值的變為低於其真實值的3?
>>> a = np.array([83734315])
>>> a.astype('f')
array([ 83734312.], dtype=float32)
>>> a.astype('float64')
array([ 83734315.])
32位浮點數可以精確地表示尾數的約7個十進制數字。 您的號碼需要更多,因此無法准確表示。
發生的機制如下:
32位浮點數具有24位尾數。 您的數字需要精確表示27位,因此最后三位被截斷(設置為零)。 你的號碼的三個最低位是011
2 ; 這些都設定為000
2 。 觀察到011
2是3
10 。
float32
只有24位有效位精度,大約是7位數(log10(2 ** 24)= 7.22)。 您希望它能准確存儲一個8位數字,這通常是不可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.