【cs基礎】浮點數的存儲

浮點數的存儲

爲什麼討論浮點數

  • 計算機只能識別二進制,整數轉化爲二進制沒有任何問題。
  • 但是!浮點數有小數點, 計算機怎麼識別!必然要有個規範來規定計算機怎麼識別吧!這個規範就是國際標準IEEE 754.

浮點數的識別規範

  • 標準規定,任何浮點數的表現形式爲

    • V= (-1)^S x M x 2^E
    • 符號位S
    • 尾數位M
    • 指數位E
  • 32bit : 符號位1,指數位8,尾數位23

  • 64bit : 符號位1,指數位11,尾數位52

  • 尾數位 M 默認總是1.xxx的形式,秉着優化的概念,標準規定保存的時候可以捨棄,讀取的時候再加上,這樣尾數範圍也增加了 1 位

  • 指數位2^E , E爲8,指數範圍0~255; E爲11,指數範圍 0~2047

  • 但是!指數E可能爲負數 也就是說指數範圍可能爲-127-128了,爲了不出現負數,標準規定採用移位存儲,保存的E數據就要+127或者+1023;
  • 比如E = 10,必須保存成10+127=137,即10001001

(1)E不全爲0或不全爲1。這時,浮點數就採用上面的規則表示,即指數E的計算值減去127(或1023),得到真實值,再將有效數字M前加上第一位的1。
(2)E全爲0。這時,浮點數的指數E等於1-127(或者1-1023),有效數字M不再加上第一位的1,而是還原爲0.xxxxxx的小數。這樣做是爲了表示±0,以及接近於0的很小的數字。
(3)E全爲1。這時,如果有效數字M全爲0,表示±無窮大(正負取決於符號位s);如果有效數字M不全爲0,表示這個數不是一個數(NaN)。

單精度和雙精度誤差

  • 十進制轉化爲二進制的時候,要是永遠除不盡,單精度轉換爲雙精度的時候,位數變少,多餘的值被省忽略了,就會產生誤差的問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章