Floating point 纯整数乘法有错误吗?

Floating point 纯整数乘法有错误吗?,floating-point,int,multiplication,Floating Point,Int,Multiplication,我知道浮点乘法有错误,但纯整数乘法有错误吗?假设我在使用Python,我可以计算多大的整数A和B,并得到完全正确的答案?墙在哪里?加法也一样?在(正确的)浮点乘法中没有错误。舍入可能发生,但这不是错误,这是算术的定义行为。通俗地说,这被称为“舍入误差”,但它不是正常意义上的“误差” (正确的)整数乘法没有错误。在某些语言中,可能会发生溢出,但这不是错误,这是算术的定义行为* 特别是在Python中,整数乘法**不会发生溢出;结果与“数学上精确”的结果相等,并且在必要时无声地提升为bignum。加

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

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

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

特别是在Python中,整数乘法**不会发生溢出;结果与“数学上精确”的结果相等,并且在必要时无声地提升为bignum。加法也是如此

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


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

溢出非常容易发生。取两个8位数字0x02*0xFF=0xFE是错误答案。为了得到正确答案,您的结果需要两倍于0xFF*0xFF=0xFE01的位,因此,如果您想进行N位乘法,请使用N*2位整数in C,计算带符号整数时的溢出不能合理地视为“错误”,因为标准委员会(非常不明智的IMHO)决定当整数溢出发生时,编译器作者应该有完全的自由去做任何他们想做的事情,包括将CPU变成一堆熔渣[IMHO,他们应该提供非常大的自由度,也许可以扩展到允许“任何实现定义的行为”,但也可以扩展到“未定义的行为”更糟糕]。