鐵之狂傲

標題: 為什麼float&long都是吃32bits,可是範圍不一樣大? [列印本頁]

作者: magicalloveshe    時間: 07-7-5 01:15
標題: 為什麼float&long都是吃32bits,可是範圍不一樣大?
long -2147483648~2147483647
float -3.4+10^38~3.4+10^38
這兩種型態宣告都是佔4bytes
為什麼範圍差那麼多?
float的數字範圍比long多上幾乎10^28這麼多倍耶!
這種問題有解嗎?
還是只能告訴自己...這是規定...0.0
作者: turnX    時間: 07-7-5 01:15
原文由magicalloveshe 於 07-7-5 01:15 AM 發表
long -2147483648~2147483647
float -3.4+10^38~3.4+10^38
這兩種型態宣告都是佔4bytes
為什麼範圍差那麼多?
float的數字範圍比long多上幾乎10^28這麼多倍耶!
這種問題有解嗎?
還是只能告訴自己...這是規定...0.0 ...


這是規定!
long算是整數的一種,長整數.在怎麼樣也無法表示像有小數(1.1或1.23)的這些實數 (這受限於表示式或公式的制定)
而float是由 sign(符號,可表正負數...這裡和一般整數一樣,只佔1bits 0 or 1)  exponent(指數) 和 mantissa(尾數)所組成 用來表示實數(real number)
制定方式有一定標準,不同標準的浮點數所表示的值也不一樣(可查其中一種IEEE754規格看看)
而float以有限欄位去表示整個實數系,當然會有誤差發生,這就不用提,就跟long以有限欄位表現整數一樣(無法完全表示)

而float公式大概是 (-1)^(sign)*(1.尾數)*2^(指數-127)  (這公式我有點忘了,不過大概像這樣)
如果 sign=1 尾數=0 指數=0  -1*2^(-127)=-2^-127 當然比long還大 , 因為long是-2^31~2^31-1
另外float還可表示infinite -infinite 和 NaN

所以這都是設計上面的問題造成

[ 本文最後由 turnX 於 07-7-12 08:55 PM 編輯 ]
作者: magicalloveshe    時間: 07-7-5 10:46
因為儲存數值的方法不一樣

float的有效數字比long少,剩下的拿去記錄指數用。

以上分別是微風的
cflee3000
parkus
回答的答案




歡迎光臨 鐵之狂傲 (https://gamez.com.tw/)