浮點型數據
浮點型數據定義
浮點型數據分為 浮點型常量和浮點型變量
它有二種形式: 十進制數形式指數形式
1.十進制數形式
由數碼0~ 9和小數點組成。例如:0.0,.25,5.789,0.13,5.0,300.,-267.8230等均為合法的實數。
2.指數形式
由十進制數,加階碼標志“e”或“E”以及階碼(只能為整數,可以帶符號)組成。其一般形式為a E n (a為十進制數,n為十進制整數)其值為 a10,n 如: 2.1E5 (等于2.110的5次方), 3.7E-2 (等于3.7*10的-2次方)
實型變量分為兩類:單精度型和雙精度型,
其類型說明符為float 單精度說明符,double 雙精度說明符
C語言實數
只采用十進制
標準C允許浮點數使用后綴。后綴為“f”或“F”即表示該數為浮點數
C中單精度型占4個字節(32位)內存空間,其數值范圍為3.4E-38~3.4E+38,只能提供七位有效數字。雙精度型占8 個字節(64位)內存空間,其數值范圍為1.7E-308~1.7E+308,可提供16位有效數字。
相互轉換
IEEE754標準中浮點數表示格式IEEE規定的浮點數表示法是一種科學計數法,用符號(正或負)、指數和尾數來表示,底數被確定為2。也就是說浮點數被表示為尾數乘以2的指數次方再帶上符號。具體格式如下:
- | 符號域 | 指數域 | 小數域 | 指數偏移量 |
單精度浮點數 | 1 位[31] | 8位[30-23] | 23位[22-00] | 127 |
雙精度浮點數 | 1 位[63] | 11 位[62-52] | 52 位[51-00] | 1023 |
符號域:符號域占1位,0表示正數,1表示負數。指數域:指數域共有8位,可表達的范圍為:0~255。為能處理負指數,實際指數為存儲在指數域中值減去一個偏移量(單精度為127,雙精度為1023)。
偏移量
在科學計數法中,指數可以是負數(例如:0.001=1.0×10?3)。但在計算機中:
-
硬件限制:直接存儲負數指數需要額外的符號位,增加電路復雜度
-
比較效率:無符號整數比較比有符號數更快
-
統一處理:希望所有指數值都能用無符號整數表示
實際指數為存儲在指數域中值減去一個偏移量(單精度為127,雙精度為1023)。
實數轉二進制的核心步驟
分離整數和小數部分
整數部分轉二進制:除2取余(逆序)
小數部分轉二進制:乘2取整(順序)
原理就是
二進制小數的權重是2的負冪次
如
二進制小數:0.101?
= 1×2?1 + 0×2?2 + 1×2?3
每次*2,都是講二進制權重為2的-1次方變為1,其他的往前移
數學本質是解方程:
0.625 = a×2?1 + b×2?2 + c×2?3 + ...
兩邊×2:1.25 = a + b×2?1 + c×2?2 + ...
∴ a = 1 (取整數部分)
剩余:0.25 = b×2?1 + c×2?2 + ... (遞歸求解)
合并結果:整數部分.小數部分
規范化:調整成 1.xxx × 2^E 形式
小數點右移1位相當于除于二,右移多少位則E為多少
十六進制(二進制)轉實數
示例解析:0xC0B40000 → 實數
步驟1:十六進制轉二進制
0xC0B40000 = 1100 0000 1011 0100 0000 0000 0000 0000
并按域拆分:
符號位:1(負數)
指數域:10000001(bits 30-23)
尾數域:01101000000000000000000(bits 22-0)
步驟2:計算實際指數
-
指數域
10000001→ 十進制:
1 * 2^{7} + 0 * 2^{6} + ... + 1 * 2^{0} = 128 + 1 = 129$1×27+0×26+?+1×20=128+1=129 -
實際指數 = 129 - 127 = 2
步驟3:構造實際尾數
- 尾數域
01101...→ 隱含前導1 → 實際尾數 =1.01101
步驟4:二進制尾數轉十進制
- 計算
1.01101(二進制):
步驟5:合成最終值
- 最終值 = 符號 × 尾數 × 2^{指數}
\(= - 1 \times 1.40625 \times 2^{2}\)=?1×1.40625×22
\(= - 1.40625 \times 4\)=?1.40625×4
\(= \boxed{- 5.625}\)=?5.625?
參考
浮點型數據_百度百科
浙公網安備 33010602011771號