Python 大整数的内置 pow 和数学 pow 之间的区别

Difference between Python built-in pow and math pow for large integers

我发现对于大整数,math.pow() 没有成功给出它的整数版本。

(我在使用 math.pow 实现时遇到了一个错误 Karatsuba multiplication)。

例如:

>>> a_Size=32
>>> pow(10,a_size) * 1024
102400000000000000000000000000000000
>>> math.pow(10,a_size) * 1024
1.024e+35
>>> int(math.pow(10,a_size) * 1024)
102400000000000005494950097298915328

我选择了 10 ** a_size,大整数的结果是正确的。

对于花车,请访问Difference between the built-in pow() and math.pow() for floats, in Python?

请解释为什么 math.pow 会出现这种差异。仅从 23 的 10 次方及更高的次方观察到。

math.pow() 总是 returns 一个浮点数,所以你受到 float 精度的限制(几乎总是一个 IEEE 754 双精度数)。另一方面,当使用整数参数调用时,内置 pow() 将使用 Python 的任意精度整数算法。