浮點數和定點數的關係理解

浮點數和定點數的關係理解

一直以來,程序中接觸的數據類型都是int整型,char字符型,float單精度浮點型,double雙精度浮點型。看到浮點和定點一直不知道如何劃分這個概念的範疇。以爲浮點就是float表示小數,定點就是int可表示整數而已。經過學習明白了顯然是錯誤的。應該是這樣劃分的:

  • 浮點:小數點非固定的數,可表示數據範圍較廣,整數,小數都可表示。包含float,double;
  • 定點:小數點固定,可表示整數,小數。int(整數)本質是小數點位於末尾的32位定點數而已

1. 什麼是單精度和雙精度?

  • 單精度:單精度數是指計算機表達實數近似du值的一種方式。VB中zhiSingle(單精度浮點型)變量存儲爲 IEEE 32 位(4 個字節),浮點數值的形式,它的範圍在負數的時候是從 -3.402823E38 到 -1.401298E-45,而在正數的時候是從 1.401298E-45 到 3.402823E38 。

  • 雙精度:雙精度浮點數(double)是計算機使用的一種數據類型,使用 64 位(8字節) 來存儲一個浮點數。 它可以表示十進制的15或16位有效數字,其可以表示的數字的絕對值範圍大約是:4.9x10-324 ~ 1.7x10308。IEEE754爲其定製標準。

2. 浮點數的表示法

浮點數以float爲例討論。
IEEE 754標準:
規定浮點數格式爲:V=(1)sM2EV = (-1)^s * M * 2^E

  • s表示符號位,當s=0,V爲正數;當s=1,V爲負數;
  • M表示尾數,2>M>=1;
  • E表示階碼。

32位的浮點數中,S是浮點數的符號位,佔1位,安排在最高位,S=0表示正數,S=1表示負數。M是尾數,放在低位部分,佔用23位,小數點位置放在尾數域最左(最高)有效位的右邊。E是階碼,佔用8位。
64位的浮點數中符號位1位,階碼域11位,尾數域52位

將其封裝到32位的字中:

符號位 階碼 尾數
1 8 23

根據32位數計算爲十進制:V=(1)s(1.M)2E127V = (-1)^s *(1.M) * 2^{E-127}
可以得出以下結論:

  • 浮點數表示比整型那些更爲複雜。如int中0…01000表示8,0…01001表示9,而浮點不能這樣簡單。
  • 浮點數不能移位。因爲各個位有特殊含義。像int數乘2可以左移1位實現。

參考文獻

  1. 浮點數和定點數的轉換是一種映射。將較爲密集的數據空間(F32)映射到較爲稀疏的空間(int8);
  2. 定點數的小數點實際中是沒有的,這只是我們邏輯上的一種設定。01序列是一樣的,CPU讀取都是相同的,因爲我們邏輯上小數點的不同位置,我們認爲它代表的值是不同的;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章