【計算機組織與結構】IEEE-754 浮點數標準的計算

在做計算之前,先來介紹一下IEEE-754是什麼吧。

进制数在线转换工具:https://www.osgeo.cn/app/s1653

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是指雙精確度)。

表示法

File:IEEE 754 Single Floating Point Format.svg - 維基百科,自由的 ...
  • 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):

Single Precision vs Double Precision - The Crazy Programmer
  • 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 * 2^6,得到指數部分為6。
指數6 + 偏移值127 = 133,133轉為二進制為:10000101,即指數部分填入10000101

(C) 尾數部分填上小數後的001000101,剩下的位元數用0填滿。

轉為16進制 => 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 * 2^5,得到指數部分為5。
指數5 + 偏移值127 = 132,132轉為二進制為:1000100,即指數部分填入1000100

(C) 尾數部分填上小數後的00101001,剩下的位元數用0填滿。

可得到 1 10000100 00101001000000000000000

轉為16進制 => 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 * 2^4 = – 10011 (2) = -19 (10)

最後更新時間:

相關文章

發表留言