定點除法運算
商不能大於除數對嗎
定點除法運算
1.原碼比較法和恢復餘數法
⑴比較法
比較法類似於手工運算,只是為了便於機器操作,將除數右移改為部分餘數左移,每一位的上商直接寫到暫存器的最低位。
設A暫存器中存放被除數(或部分餘數),B暫存器中存放除數,C 暫存器用來存放商Q,若A≥B,則上商1,並減除數;若A
比較法需要設定比較線路,從而增加了硬體的代價。
⑵恢復餘數法
恢復餘數法是直接作減法試探方法,不管被除數(或部分餘數)減除數是否夠減,都一律先做減法。
•規則:
將被除數-除數,
結果大於0,商1,餘數左移一位。
結果小於0,商0,恢復餘數,餘數左移一位。
重複上述操作,直至商的精度滿足要求為止。
恢復餘數法在計算機中較少採用的原因:
(1)恢復除數法會使得除法運算的實際操作次數不固定,從而導致控制電路比較複雜。
(2)而且在恢復餘數時,要多作一次加法,降低了除法的執行速度。
2.原碼不恢復餘數法(原碼加減交替法)
原碼不恢復餘數法是對恢復餘數法的一種改進,它減少了浪費的加法時間,且運算的次數固定,故被廣泛採用。
在恢復餘數法中,若第i-1次求商的部分餘數為ri-1,則第i次求商操作為:ri=2ri-1-Y,
若夠減,部分餘數ri=2ri-1-Y>0,商1,然後進行第i+1次操作:
ri+1=2ri-Y 。
若不夠減,部分餘數ri=2ri-1-Y<0,商0,恢復餘數後,ri’=ri+Y,然後再進行第i+1次操作:
ri+1=2ri’-Y =2(r i+Y)-Y=2ri+2Y-Y=2ri+Y
原碼不恢復餘數除法由下面的通式表示:
ri+1=2ri+(1-2Qi)Y
式中Qi為第i次所得的商,若部分餘數為正,則Qi=1,部分餘數左移一位,下一次繼續減除數;若部分餘數為負,則Qi=0,部分餘數左移一位,下一次加除數。由於加減運算交替地進行,故稱為原碼加減交替法。
除法運算需要3個暫存器。A和B暫存器分別用來存放被除數和除數,C暫存器用來存放商,它的初值為0。運算過程中A暫存器的內容為部分餘數,它將不斷地變化,最後剩下的是擴大了若干倍的餘數,只有將它乘上2-n才是真正的餘數。
例。已知:X=0。10101,Y=0。11110,求:X÷Y。
|X|=00。10101→A,|Y|=00。11110→B,0→C , [|Y|]變補=11。00010
原碼不恢復餘數法需要注意的問題:
(1)在定點小數除法運算時,為了防止溢位,要求被除數的絕對值小於除數的絕對值,|X|<|Y|(|X|=|Y|除外),且除數不能為0。
(2)在原碼加減交替法中,當最終餘數為負數時,必須恢復一次餘數,使之變為正餘數,注意此時不需要再左移了。
補碼加減交替除法規則
規則:
1)第一次: 若被除數與除數同號,做被除數減除數
若被除數與除數異號,做被除數加除數
2)若餘數與除數同號,商1,餘數左移一位,減除數
若餘數與除數異號,商0,餘數左移一位,加除數
3)商的末位恆置1(誤差 2-n),餘數可以是負的,不需要恢復餘數。