我有下面的代码来计算n!在
import numpy as np
print "n! (for n<31)"
print
n = input("Enter n: ")
lst = []
for i in range(1,n+1):
lst.append(i)
print lst #Just to see if the program is working
print "n!: ", np.prod(lst)
但是,对于某些数字,程序返回负值。在
例如。 以下是我运行n=20时在控制台上显示的:
^{pr2}$n=32时也会发生这种情况 但是,这个程序对其他数字也有效,比如3!返回6。在
有人能解释一下吗。在
以下是numpy prod函数文档的链接:
numpy.prod
如果您转到该页的底部,您将看到最后一个示例,即当x(函数的给定参数)是无符号整数时,返回的结果是一个默认平台整数。因此,当结果超过可以存储在32位整数中的值时,numpy不会像python通常那样将结果转换为long类型。所以你得到了整数溢出。在
如果声明函数:
然后做:
^{pr2}$你会得到:
这是20!的正确值!。在
顺便说一句,做:
不太理想。Python的range函数可以很容易地做到这一点!尝试:
你已经在你的for循环中这样做了!您可以在解释器中进行测试:
正如我在评论中所写的,这是一个32位的问题。如果你有一个64位系统,你仍然可以计算多达20!在
下面是一个没有numpy的解决方案,使用python内置类型,可以非常安全地处理此类问题:
这里有一个递归函数,可以让你的思维弯曲;-)
^{pr2}$我强烈怀疑Numpy正在创建一个32位int的数组。在
因此,当n!大于32位整数的限制。在
尝试:
相关问题 更多 >
编程相关推荐