天天看點

計算機組成原理之浮點運算

轉載自:https://blog.csdn.net/qq_39378221/article/details/80658082?utm_source=app&app_version=4.5.2

寫得真好

浮點數運算的特點是階碼運算和尾數運算分開來算。加減運算一律采用補碼。具體運算分為以下幾步。 1、對階:對階的目的是讓兩個數小數點的位置看齊,使這兩個數的階碼相等。顯然1.1×23和1.1×24是不能直接相加減的。原則是小階向大階看齊,像這個例子,就是1.1×2^3的尾數右移一位,階碼加一,直到兩個數的階碼相等。 2、尾數求和:階碼對齊之後就可以直接按照定點數的加減法則運算尾數了。 3、規格化:尾數求和後的結果如果不是規格化數需要規格化,以雙符号位運算為例的話,如果運算結果為正數,規格化的形式應該是00.1xxx…x,如果運算結果為負數,規格化後的形式應該是11.0xxx…x,不符合這種形式的數要進行左規或者右規的操作讓其變成這種形式。(在尾數沒有溢出的情況下,即尾數結果的雙符号為不是10或01的時候,操作都是左規操作,左規操作可能不止進行一次,倘若雙符号位為01或10則表明尾數已經溢出了,就要進行右規操作,右規隻需要進行一次) 4、舍入:在對階和右規的操作中,我們都是将尾數右移,階碼加一,由于我們的位數是有限的,在右移的操作過程中很有可能就将低位的尾數丢失了,這會引起誤差和精度問題。常用的減小誤差的方法有“0”舍“1”入法:即在尾數右移時,被移去的最高數值位為0則舍去,如果被移去的最高數值位為1則在尾數末位加1,如果加1之後又産生溢出則再右規操作一次。恒置“1”法:看名字就可以知道,無論丢掉的最高數值位是1還是0,都使右移後的尾數末位置1。這種方法可能使尾數變大或者變小。 5、溢出判斷:既然定點數運算可能溢出,浮點數同樣也會溢出,我們已經知道浮點數的表示方法和加減運算規則,既然是溢出,那麼肯定是超出了浮點數能表示的範圍,浮點數的範圍主要是由階碼決定的,如果運算結果規格化後階碼産生了溢出,那才是浮點數的溢出。浮點數的溢出與否是由階碼的符号決定的。以雙符号位的補碼為例,如果階碼的符号位出現01或10則說明階碼溢出了,01表示階碼大于最大階碼,上溢,進入中斷處理;10表示階碼小于最下階碼,下溢,按機器零處理。(溢出時真值的符号位和高位符号位保持一緻)還要注意的一點是尾數之和(差)可能會造成尾數的溢出,這并不代表整個的溢出,需要右規一次看階碼是否溢出才能判斷。

繼續閱讀