Python 中一个非常大的整数的 math.pow 是错误的

math.pow of a very large integer in Python is wrong

我正在尝试通过计算整数的非常大的幂来打印非常大的数字。尽管我的代码是正确的,但我没有观察到所需的输出。

通常,python 解释器可以打印系统内存支持的非常大的整数。考虑到这个假设,下面是我 运行.

的代码
a = int(input())
b = int(input())
c = int(input())
d = int(input())

import math
if a in range(1,1001):
    if b in range(1,1001):
        if c in range(1,1001):
            if d in range(1,1001):
                print((math.pow(a,b)+math.pow(c,d)))

我观察到的输出是

4710194409608608302099333120

预期的输出是

4710194409608608369201743232

能否请您指点一下如何解决这个问题? 输入值为:

a = 9
b = 29
c = 7
d = 27

您 运行 达到了浮点精度的极限。来自文档:

Unlike the built-in ** operator, math.pow() converts both its arguments to type float. Use ** or the built-in pow() function for computing exact integer powers.

所以只需使用 **

>> 9**29+7**27
4710194409608608369201743232

math.pow 将输入转换为 float

您显示的预期结果是您这样做时得到的结果:

x = 9**29
y = 7**27
print(x+y)

您看到的结果来自于:

x = float(9**29)
y = float(7**27)
print(int(x+y))

这样试试

>>> 9 ** 29 + 7 ** 27
4710194409608608369201743232