如何在python中处理非常大的整数?
受Instagram帖子的启发,我使用斐波那契矩阵的概念编写了一个获取斐波那契序列的代码如何在python中处理非常大的整数?,python,anaconda,largenumber,Python,Anaconda,Largenumber,受Instagram帖子的启发,我使用斐波那契矩阵的概念编写了一个获取斐波那契序列的代码 def f(n): import numpy as np m=np.array([[1,1],[1,0]],dtype=np.int64) m1=m for i in range(0,n): m1=np.matmul(m1,m) return m1[0,1] 但在n=93之后,它开始给出负数。如果我使用np.int32作为数据类型,那么在n=47之后,它开始给出否定和错误的结果。 我使用的是Py
def f(n):
import numpy as np
m=np.array([[1,1],[1,0]],dtype=np.int64)
m1=m
for i in range(0,n):
m1=np.matmul(m1,m)
return m1[0,1]
但在n=93之后,它开始给出负数。如果我使用np.int32作为数据类型,那么在n=47之后,它开始给出否定和错误的结果。
我使用的是Python3.9,我希望我的结果是整数(而不是浮点)。如何才能获得n=1000或更大的正确结果?Numpy ctypes是本机实现的,因此长数据类型在达到64位时将开始溢出。但是,您可以使用
dtype=object
来使用python的任意大整数,这可能会导致处理速度非常慢。哦,对不起,这是一个错误,实际上,我使用的是np.int64,在python 3.9中,它说没有所谓的长整数。我使用了dtype=object,然后这个代码用于范围(1100)中的I:print(f(I-1))如果f(I-1)哪个索引给你一个负数?我刚试过打印([f(I)代表范围(0,1000)内的I)]
,没有任何结果是负数。假设代码被更新为m=np.array([[1,1],[1,0]],dtype=object)