回覆列表
  • 1 # 使用者1062846289535

    單精度數的尾數用23位儲存,加上預設的小數點前的1位1,2^(23+1) = 16777216。

    因為 10^7

    雙精度的尾數用52位儲存,2^(52+1) = 9007199254740992,

    因為10^16

    擴充套件資料:

    “浮點數的精度取決於尾數部分。尾數部分的位數越多,能夠表示的有效數字越多。”這句贊同,所以雙精度的有效位數肯定比單精度的多。

    一個數如果有效位數大於7位 如1.27893456076(12位),用float來表示就不能準確的儲存了。

    執行:

    float a = 1.23456789076f;// --->a = 1.2345679

    即用1.23456789076在計算機中儲存成float的格式只能逼近到第七位,

    能不能準確儲存還取決於這個數字(十進位制數)能不能用有限的二進位制位數準確的表示。 float = 2.202 float = 2.25

    如果小數部分轉化為二進位制時候得到一個無窮值,則會根據尾數部門的長度捨棄多餘的部分,從而儲存一個近似的浮點值,這就解釋了 為什麼在比較浮點數值時候 要做一個區間比較 而不是 等值比較。

    溢位處理

    浮點數的溢位是以其階碼溢位表現出來的。在加\減運算過程中要檢查是否產生了溢位:若階碼正常,加(減)運算正常結束;若階碼溢位,則要進行相應處理。另外對尾數的溢位也需要處理。

    階碼上溢 超過了階碼可能表示的最大值的正指數值,一般將其認為是+∞和-∞。

    階碼下溢 超過了階碼可能表示的最小值的負指數值,一般將其認為是0。

    尾數上溢 兩個同符號尾數相加產生了最高位向上的進位,將尾數右移,階碼增1來重新對齊。

    尾數下溢 在將尾數右移時,尾數的最低有效位從尾數域右端流出,要進行舍入處理。

    參考資料:

  • 中秋節和大豐收的關聯?
  • 攤餘成本是指什麼?攤餘成本與通常所稱的歷史成本概念是同一回事嗎?