溢出,溢出的檢測方法有哪些?
在定點小數機器中,數的表示范圍為|x|<1. 在運算過程中如出現大于1的現象,稱為“溢出”。在定點機中,正常情況下溢出是不允許的。
[例12] x=+0.1011, y=+0.1001,求x+y。
[解:]
[x]補=0.1011 [y]補=0.1001
[x]補 ? 0.1011
+[y]補 0.1001
--------------------
[x+y]補 1.0100
兩個正數相加的結果成為負數,這顯然是錯誤的。
[例13] x=-0.1101, y=-0.1011,求x+y。
[解:]
[x]補=1.0011 [y]補=1.0101
[x]補 ? 1.0011
+[y]補?? ?1.0101
--------------------
[x+y]補 ? 0.1000
兩個負數相加的結果成為正數,這同樣是錯誤的。
之所以發生錯誤,是因為運算結果產生了溢出。兩個正數相加,結果大于機器所能表示的最大正數,稱為上溢。而兩個負數相加,結果小于機器所能表示的最小負數,稱為下溢。
為了判斷“溢出”是否發生,可采用兩種檢測的方法。第一種方法是采用雙符號位法,這稱為“變形補碼”或“模4補碼”,從而可使模2補碼所能表示的數的范圍擴大一倍。變形補碼定義為
????????????????????????? (2.22)
或用同余式表示為
[x]補=4+x (mod 4)
下式也同樣成立:
[x]補+[y]補=[x+y]補??? (mod 4)
為了得到兩數變形補碼之和等于兩數之和的變形補碼,同樣必須:
1. 兩個符號位都看作數碼一樣參加運算
2. 兩數進行以4位模的加法,即最高符號位上產生的進位要丟掉。
采用變形補碼后,如果兩個數相加后,其結果的符號位出現“01”或“10”兩種組合時,表示發生溢出。這是因為兩個絕對值小于1的數相加,其結果不會大于或等于2,所以最高符號位永遠表示結果的正確符號。
[例14] x=+0.1100, y=+0.1000,求x+y。
[解:]
[x]補=00.1100, [y]補=00.1000
[x]補 00.1100
+[y]補 00.1000
-------------------
????????????????01.0100
兩個符號位出現“01”,表示已溢出,即結果大于+1。
[例15] x=-0.1100, y=-0.1000,求x+y。
[解:]
[x]補=11.0100, [y]補=11.1000
[x]補 11.0100
+[y]補 11.1000
-------------------
?????????? ?10.1100
兩個符號位出現“10”,表示已溢出,即結果小于-1。
由此可以得出如下結論:
1. 當以模4補碼運算,運算結果的二符號位相異時,表示溢出;相同時,表示未溢出。故溢出邏輯表達式為V=Sf1⊕Sf2,其中Sf1和Sf2分別為最高符號位和第二符號位。此邏輯表達式可用異或門實現。
2. 模4補碼相加的結果,不論溢出與否,最高符號位始終指示正確的符號。
第二種溢出檢測方法是采用單符號位法。從例1和例2中看到,當最高有效位產生進位而符號位無進位時,產生上溢;當最高有效位無進位而符號位有進位時,產生下溢。故溢出邏輯表達式為V=Cf⊕Co,其中Cf為符號位產生的進位,Co為最高有效位產生的進位。此邏輯表達式也可用異或門實現。
在定點機中當運算結果發生溢出時,機器通過邏輯電路自動檢查出溢出,并進行中斷處理。
非常好我支持^.^
(510) 97.7%
不好我反對
(12) 2.3%
相關閱讀:
- [電子說] 虛擬內存溢出該怎么處理 虛擬內存在服務器中的應用 2024-12-04
- [電子說] TDC_GP22模塊的狀態寄存器為0x0408,粗值計算溢出 2024-08-07
- [電子說] AI垃圾溢出識別攝像機 2024-03-13
- [電子說] ug內部錯誤,內存訪問違例怎么解決 2023-12-27
- [電子說] 內存溢出與內存泄漏:定義、區別與解決方案 2023-12-19
- [電子說] STM32的向上計數模式如何產生計數器溢出事件? 2023-12-13
- [電子說] jvm內存溢出該如何定位解決 2023-12-05
- [電子說] jvm內存溢出故障排查 2023-12-05
( 發表人:admin )