浮點數和定點數的關係理解
一直以來,程序中接觸的數據類型都是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標準:
規定浮點數格式爲:
- 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位數計算爲十進制:
可以得出以下結論:
- 浮點數表示比整型那些更爲複雜。如int中0…01000表示8,0…01001表示9,而浮點不能這樣簡單。
- 浮點數不能移位。因爲各個位有特殊含義。像int數乘2可以左移1位實現。
參考文獻
- 浮點數和定點數的轉換是一種映射。將較爲密集的數據空間(F32)映射到較爲稀疏的空間(int8);
定點數的小數點實際中是沒有的
,這只是我們邏輯上的一種設定。01序列是一樣的,CPU讀取都是相同的,因爲我們邏輯上小數點的不同位置,我們認爲
它代表的值是不同的;