1

我发现对于大整数,math.pow 没有成功转换为其整数版本。使用 math.pow 实现时,我得到了一个错误的Karatsuba 乘法。

例如:

>>> 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,得到了大整数的正确结果。

对于浮点数,请访问Python 中用于浮点数的内置 pow() 和 math.pow() 之间的区别?

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

4

1 回答 1

4

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

于 2016-10-10T14:19:10.643 回答