Double類型只用8字節存儲但範圍爲什麼那麼大

Double類型只用8字節存儲但範圍爲什麼那麼大


ODPS的Double描述:
類型     描述                 取值範圍
Double   8字節雙精度浮點數。  -1.0E308 ~ 1.0E308


Double用8字節雙精度浮點數
1.0E+38
1.0乘以10的308次方,爲什麼會這麼大?64位能表示的最大不應該是2^64嗎?


1,因爲double類型是浮點數,這種類型可以用科學記數法表示,所以表示範圍非常大。
但是,使用可浮點數的代價就是損失了精度。它把這部分精度用於指數的表示。
所以double類型的優點就是數據範圍大,缺點是精度不足,大概只有15~16位有效位數。


2,它表示大數的代價就是損失了精度。舉個例子:假設我有0-9這10個數,我定義數n表示5n,那麼這10個數最大能表示5*9=45。
能表示的範圍是:0、5、10、15、20、25、30、35、40、45。最小值爲0,最大值爲45。所以表示的範圍是:0~45。
但1、2、3、4,......,41,42,43,44這些不是5的倍數的數就沒法精確表示了,只能在定義中把它們靠向0、5、......、40或者45。
這就是爲了擴大表示範圍而損失了表示精度。


Oracle NUMBER類型的最大字符個數是38
所以,Oracle NUMBER能表示的最大整數爲:a = 99999999999999999999999999999999999999(38個9)
如果轉換成DOUBLE,會丟失精度,用DOUBLE存儲以後,實際的結果爲:b = 1E38 即 10^38 = 100000000000000000000000000000000000000


顯然:a ≈ b
但b不是我們期待的值,除非實際應用場景能夠認可。

所有Oracle NUMBER不能簡單的轉爲DOUBLE存儲,會丟失精度。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章