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