對於浮點數的計算,首先可以看加減操作。浮點數的加減法分為5個操作:對階 尾數加減 規格化 舍入 判溢出五個步驟:
1)對階 將兩個科學記數法表示的數 的階數對齊。
例如:9.85211*10^12 + 9.66007*10^10 (這里寫的是十進制數)
對於這種加法,階數小的數向階數大的數靠攏。這樣做的好處是方便處理尾數。
2)尾數相加減 加減法
3)規格化 規格化指的是讓尾數的首位有效(不是0),將尾數控制在0.01~1內
4)舍入 根據題目要求,有時候可能需要舍去幾位尾數。常見做法是四舍五入,或者直接暴力抹除並進1.
5)判溢出 因為階碼不能超過表示上限。
------
例題:十進制數x=- 5/256 y=+59/1024 按照補碼規則計算X-Y
(在此處規定浮點數標准為:階符2位,階碼3位,數符取2位,尾數取9位 階碼和尾數都使用補碼表示)
解答: X 從十進制轉換為二進制,5->101 5/256-->101/28 那么-5/256--->-101/28--> -0.101*2-101
Y:59-->111011 1/1024--->2-10 那么Y=59/1024--->0.111011* 2-100
將X和Y轉換為補碼形式:
X:-101-->11101(原碼)-->11011(補碼)
Y:-100--->11011(原碼)-->11100(補碼) 0.111011--->00 111011000(原碼、補碼)
所以,X用補碼表示是11011 11 011000000 Y用補碼表示是11100 00 111011000 前面5位是階符和階碼,中間2位是數符,后9位是尾數。
在完成數碼轉換后,進行浮點數的加減法:
1) 對階:小階對大階
求階差: 11011+00100=11111 x和y的階數相差為1 為了小階對大階,修改X的階碼。
對齊:X的原碼形式階符+階碼是11101,加1以后變成11110,再取補碼得11010。再將尾數右移一位,尾數變成了-0.0101,再轉補碼就是11 101100000.補碼變成了11100 11 101100000
-Y的補碼是11100 11 000101000
X-Y的補碼=X的補碼+-Y的補碼,X+(-Y)= 11100 10 110001000
注意:數符部分出現了10 ,說明計算過程中出現了進位溢出,稍后處理
3)規格化:11100 10 110001000(補碼)--->-1.001111*2-100 --->-0.1001111*2-011 對應的機器碼變化是11100 10 110001000(補碼)---> 11101 11 011000100(補碼)
4)舍入 這道題沒有要求舍去,所以不用處理
5)判溢出 無最大最小溢出,無需處理