鐵之狂傲

 取回密碼
 註冊
搜尋

切換到指定樓層
1#
100鐵幣
long -2147483648~2147483647
float -3.4+10^38~3.4+10^38
這兩種型態宣告都是佔4bytes
為什麼範圍差那麼多?
float的數字範圍比long多上幾乎10^28這麼多倍耶!
這種問題有解嗎?
還是只能告訴自己...這是規定...0.0

最佳解答

turnX 檢視完整內容

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

回覆 使用道具 檢舉

原文由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 編輯 ]
 

回覆 使用道具 檢舉

因為儲存數值的方法不一樣

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

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

回覆 使用道具 檢舉

你需要登入後才可以回覆 登入 | 註冊

存檔|手機版|聯絡我們|新聞提供|鐵之狂傲

GMT+8, 25-3-6 03:38 , Processed in 0.020689 second(s), 18 queries , Gzip On.

回頂部