纯粹整数乘法中是否存在错误?

问题描述:

我知道在浮点乘法中存在错误,但是在纯粹的整数乘法中存在错误吗?假设我正在使用Python,可以计算A和B的整数A和B的大小,并得到完全正确的答案?墙在哪里?还有与加法一样吗?纯粹整数乘法中是否存在错误?

+1

溢出很容易打。取两个8位数字0x02 * 0xFF = 0xFE是错误的答案。为了得到正确的答案,你的结果需要两倍的位数0xFF * 0xFF = 0xFE01,所以如果你想要做N位乘法使用N * 2位整数 – 2014-09-22 19:37:57

(正确)浮点乘法中没有错误。舍入可能会发生,但这不是错误,那是算术的定义行为。通俗地说,这被称为“舍入错误”,但它不是正常意义上的“错误”。

(正确)整数乘法中没有错误。在某些语言中,可能发生溢出,但这不是错误,这是算术*定义的行为。

特别是在Python中,溢出不会发生整数乘法**;结果等于“数学上精确”的结果,如果有必要,它会默默地提升为一个高音。加法也是如此。

[*]有些语言的溢出会产生陷阱或引发异常;然而,这又是那些语言中定义的行为。

[**]只要结果不是很大,以至于无法分配存储空间。

+0

在C中,计算有符号整数时的溢出不能被合理地视为其他任何东西而不是一个“错误”,因为标准委员会(很不明智的恕我直言)决定编译器作者应该被赋予完全*去做任何他们想要的事情,当发生整数溢出时,直到并包括把CPU变成一堆熔渣[恕我直言,他们应该提供很大的*度,或许延伸到允许“任何*实现定义*行为”,但是就“未定义行为”而言则更糟]。 – supercat 2014-09-24 17:18:38