Power10**10给出错误的输出。可能是什么原因?

我的一个实习生为 Project Euler 中的一个问题制作了这个简短的 Python 脚本。

我们正在使用 Python 3.9.4

问题:数列,1 1 + 2 2 + 3 3 + ... + 10 10 = 10405071317。找出数列的最后十位数字,1 1 + 2 2 + 3 3 + ... + 1000 1000

这不是最好的解决方案,但理论上它应该适用于小值(我知道它不适用于更大的值而效率低下,甚至 double 也太小了。

这是她的代码:

import math
import numpy as np
x = np.arange(1,11)
a=[]

for y in x:
     z = y**y
     a.append(z)

b=sum(a)
print(a)

输出:

[1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489, 1410065408]

脚本显然还没有完成,但是您可以看到每个 1 1、 2 2、 3 3 的幂都是正确的,直到 10 10都没有返回正确的值。

你有没有看到这个问题的任何原因,对我来说似乎很奇怪?我想不通。

是的,我知道这不是最好的解决方案,最终实际的解决方案会有所不同,但解决这个谜团仍然很好。

回答

您可能在某种 32 位系统上,其中 numpy 默认为 32 位整数。这导致结果被“截断”为 32 位。您可以使用以下表达式验证结果:

(10 ** 10) % (2 ** 32)

使用内置的 Python intrange除非你需要 numpy 提供的花哨的东西。它是一个任意精度的整数实现,应该适用于各种整数计算工作负载。


以上是Power10**10给出错误的输出。可能是什么原因?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>