我使用numpy制作了一个阶乘函数。这是代码:
import numpy as np
def factorial(x):
n=[]
if x==1:
return 1
if x>1:
while x>1:
x-=1
n.append(x+1)
return np.prod(np.array(n))
该功能在阶乘(12)之前确实有效。
另一方面,这个适用于任何数字:
def fact(n):
num = 1
while n > 1:
num *= n
n -= 1
return num
例如,当我尝试计算20时,情况变得更糟!:
factorial(20)
Out[65]: -2102132736 #Wrong
fact(20)
Out[66]: 2432902008176640000 #Correct
有人能帮我理解我的功能有什么问题吗? 提前致谢
答案 0 :(得分:2)
因为你正在使用使用C风格的固定精度整数的numpy库,它们会溢出。这就是你的阶乘函数中发生的事情。要解决这个问题,你必须构造一个dtype' int64'对于较大的阶乘。
我想补充一点,这不会出现在普通的Python整数中,因为语言在溢出之前会自动将它们转换为长整数。