我发现对于大整数,math.pow没有成功转换为整数版本。用math.pow实现时,我遇到了一个bug 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次幂。
答案 0 :(得分:2)
math.pow()
始终返回一个浮点数,因此您受到float
精度的限制(几乎总是IEEE 754双精度数)。另一方面,当使用整数参数调用时,内置的pow()
将使用Python的任意精度整数运算。