最後更新於 2021 年 5 月 12 日
在做計算之前,先來介紹一下IEEE-754是什麼吧。
进制数在线转换工具:https://tool.oschina.net/hexconvert/
IEEE = 電機電子工程師學會(Institute of Electrical and Electronics Engineers)
有興趣去維基百科了解,這邊就不多提了。
IEEE-754
二進位浮點數算術標準(IEEE-754)是20世紀80年代以來最廣泛使用的浮點數運算標準,為許多CPU與浮點運算器所採用。
IEEE 754規定了四種表示浮點數值的方式:單精確度(32位元)、雙精確度(64位元)、延伸單精確度(43位元以上,很少使用)與延伸雙精確度(79位元以上,通常以80位元實做)。只有32位元模式有強制要求,其他都是選擇性的。
大部分程式語言都提供了IEEE浮點數格式與算術,但有些將其列為非必需的。例如,IEEE 754問世之前就有的C語言,現在包括了IEEE算術,但不算作強制要求(C語言的float通常是指IEEE單精確度,而double是指雙精確度)。
表示法
- Sign部分:為
(-1)S
,S為0 表示該數值為正數;S為1 表示該數值為負數。
- Exponent部分:指數減去偏移得到的結果。
單精度的指數佔用 bit 30~23 的位置為8個 bit的欄位,偏移值為127。
此欄位 = 127 表示指數為0;200 則表示指數為73 (=200-127)。雙精度的指數佔用 bit 62~52 的位置為11個 bit的欄位,偏移值為1023。計算方法同單精度。
4精度的指數佔用 bit 126~112 的位置為15個 bit的欄位,偏移值為16383。計算方法同單精度。
雙精度(64bit)與單精度(32bit):
- Fraction部分:有效數的小數部分,省略了科學表示法實數部分的1,則Fraction為1.f。
單精度計算
一、72.625(10) 存入IEEE-754 單精度:
(A) 72.625為正數,因此Sign部分為0。
(B) 將該數值分為 整數 72 及 小數 0.625 兩個部分,72 = 1001000,0.625 = 5/8 = 0.101,72.625轉為二進制為 1001000.101
。
使用科學記號表示法,將1001000.101 => 1.001000101 * 26
,得到指數部分為6。
指數6 + 偏移值127 = 133,133轉為二進制為:10000101,即指數部分填入10000101
。
(C) 尾數部分填上剛剛轉為科學記號表示後的1.001000101小數 001000101
,剩下的位元數用 0 填滿。
[由左至右填]
轉為16進制 => 0100 0010 1001 0001 0100 0000 0000 0000 = 42914000
= 儲存內碼(16)
二、-37.125 (10) 存入IEEE-754 單精度:
(A) -37.125為正數,因此Sign部分為1。
(B) 將該數值分為 整數 -37 及 小數 0.125 兩個部分,-37 = -100101,0.125 = 1/8 = 0.001,-37.125轉為二進制為 -100101.001
。
使用科學記號表示法,將-100101.001 => -1.00101001 * 25
,得到指數部分為5。
指數5 + 偏移值127 = 132,132轉為二進制為:10000100,即指數部分填入10000100
。
(C) 尾數部分填上小數後的00101001,剩下的位元數用0填滿。
可得到 1 10000100 00101001000000000000000
轉為16進制 => 1100 0010 0001 0100 1000 0000 0000 0000 = C2148000 = 儲存內碼(16)
三、IEEE-754 格式儲存碼為 C1980000(16) 表示十進制:
C = 1100 , 1 = 0001 , 9 = 1001 , 8 = 1000
則完整二進制表示為:1 10000011 00110000000000000000000
(A) 符號位元為1 表示該數為負數
(B) 指數部分10000011 = 131,131-127 = 4,表示指數為4
(C) 尾數部分 0011後方皆為0,可推測小數部分為0.0011
合起來則可得知該數為 -1.0011 * 24
= -10011 (2) = -19 (10)
- React 那些好看、有趣、實用的函式庫、組件庫推薦(2) - 2022 年 6 月 26 日
- 解決 preact 資源請求路徑錯誤的問題 - 2022 年 6 月 24 日
- [楓之谷私服] 潮流轉蛋機 NPC 腳本優化 - 2022 年 6 月 19 日
二、-37.125 (10) 存入IEEE-754 單精度:
這一題的B部分
原本:132轉為二進制為:1000100
應該是8位數->132轉為二進制為:10000100
這樣才對