2010-08-19 38 views

回答

2

是。

爲了簡單起見,我們假設溢出發生在100。

a * b >= 100,我們有溢出

因此,對於a = n,如果b >= 100/n,我們有溢出。如果ab爲0,則表示沒有溢出。

這對任何需要增加右手常數的數學設置都無效,因爲溢出檢測會溢出。但是,任何給定的操作步驟都可能會溢出,所以您確實需要在機器級別而不是算法級別之前檢查每個添加和乘法。因此,您需要將您的問題劃分爲最小的已知數量,以有效使用此溢出檢測。

我寧願讓語言拋出異常,但那只是我。

+0

這可能是在一天結束的時候更便宜,讓不同的語言(在特殊情況下),比鐵圈試圖覆蓋所有的跳以及可能溢出的情況。 – 2010-08-19 22:11:20

+0

不幸的是,舊的語言不走這條路,而且幸運的,除非你耗盡內存較新的就是沒有這個問題:P – 2010-08-19 22:29:16

+0

「除非你運行內存不足」是正確的?當算術運算產生的結果超出操作返回的數據類型範圍時,會發生溢出異常。 – 2010-08-19 23:14:02

0

打開溢出保護,然後再應用操作。如果拋出溢出異常,或者錯誤寄存器設置了溢出位,或者您的環境告訴您有關該問題,那麼您知道如果再次執行該操作,則會發生溢出。

+0

並非所有機器都具備此功能。 – 2010-08-19 22:08:55

0

對於總和:

MAX_NUMBER - A < B 

會有溢出

+1

如果A是否定的,那麼你將在你的測試 – 2010-08-19 23:27:42

+0

@保羅R您是對得到一個溢出,有必要檢查,如果A> 0。並且如果兩者都是否定的,則會溢出MIN_NUMBER。 – 2010-08-20 12:07:44