我困住了一個問題。我正在編程一個分數計算器(對於作業)。到目前爲止它效果很好,問題是我必須處理算術溢出。我做了一些研究,現在瞭解溢出。但是,我不知道如何處理它。溢出是由分子和分母之間的簡單操作引起的。避免不必要的溢出
我們給出的例子是分數操作:999999/1000000 * 500000/999999應該給答案1/2。當我的程序乘以999999 * 500000時出現溢出並且最終結果不準確(我得到-2 10204169/22761874)。
主要目標是在減少的數字可以正確表示而沒有溢出時產生正確的結果。
任何幫助,非常感謝。
我認爲你應該 - 至少 - 告訴我們你正在使用哪種語言。每種語言都有其技巧來避免這些缺陷。 Python有一個更好的技巧: – jcoppens 2014-09-05 23:15:17
想象一下你用鉛筆和紙做這個。我會寫下兩個分數(它們之間的乘法符號),並開始消除分子和分母中的常見因素。一旦我消除了這些因素,我會做一點乘法。這在計算上可能不是最好的(在任何特定意義上),但我不明白爲什麼你不能將它編碼爲第一次嘗試。 – 2014-09-06 11:57:25
可能是這個[如何處理溢出和下溢?](https://stackoverflow.com/a/33006665/2521214)將有所幫助,但我懷疑你的問題是,你正在使用低位寬度的sub-結果...'999999 * 500000'不適合32位int,您應該使用64位變量或重新排序操作,以便子結果適合您的變量。如果你真的使用分數(我沒有看到任何地方),那麼你應該簡化提名和分母,當你可以在每次改變時用GCD分割它們... – Spektre 2017-07-05 10:49:51