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 的任意精度整数算法。
我发现对于大整数,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 的任意精度整数算法。