2014-09-22 18 views
0

我知道在浮點乘法中存在錯誤,但是在純粹的整數乘法中存在錯誤嗎?假設我正在使用Python,可以計算A和B的整數A和B的大小,並得到完全正確的答案?牆在哪裏?還有與加法一樣嗎?純粹整數乘法中是否存在錯誤?

+1

溢出很容易打。取兩個8位數字0x02 * 0xFF = 0xFE是錯誤的答案。爲了得到正確的答案,你的結果需要兩倍的位數0xFF * 0xFF = 0xFE01,所以如果你想要做N位乘法使用N * 2位整數 – 2014-09-22 19:37:57

回答

2

(正確)浮點乘法中沒有錯誤。舍入可能會發生,但這不是錯誤,那是算術的定義行爲。通俗地說,這被稱爲「舍入錯誤」,但它不是正常意義上的「錯誤」。

(正確)整數乘法中沒有錯誤。在某些語言中,可能發生溢出,但這不是錯誤,這是算術*定義的行爲。

特別是在Python中,溢出不會發生整數乘法**;結果等於「數學上精確」的結果,如果有必要,它會默默地提升爲一個高音。加法也是如此。

[*]有些語言的溢出會產生陷阱或引發異常;然而,這又是那些語言中定義的行爲。

[**]只要結果不是很大,以至於無法分配存儲空間。

+0

在C中,計算有符號整數時的溢出不能被合理地視爲其他任何東西而不是一個「錯誤」,因爲標準委員會(很不明智的恕我直言)決定編譯器作者應該被賦予完全自由去做任何他們想要的事情,當發生整數溢出時,直到幷包括把CPU變成一堆熔渣[恕我直言,他們應該提供很大的自由度,或許延伸到允許「任何*實現定義*行爲」,但是就「未定義行爲」而言則更糟]。 – supercat 2014-09-24 17:18:38