Número de Fibonacci del millón – Implementación en Numpy Python
Estoy tratando de implementar un código que funcione para recuperar el número de Fibonacci por encima de un millón. Estoy usando la multiplicación de matrices con Numpy para cálculos más rápidos.
Según mi comprensión, debería tomar O(logN) tiempo y en el peor de los casos para un millón debería resultar en: Aproximadamente 6 segundos, lo cual debería estar bien.
A continuación se muestra mi implementación:
def fib(n):
import numpy as np
matrix = np.matrix([[1, 1], [1, 0]]) ** abs(n)
if n%2 == 0 and n < 0:
return -matrix[0,1]
return matrix[0, 1]
Sin embargo, ni siquiera está generando la respuesta correcta para 1000.
Respuesta real:
43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875
Mi respuesta:
817770325994397771
¿Por qué Python está truncando las respuestas que generalmente debería ser capaz de calcular hasta valores de 10**1000? ¿Dónde me equivoqué?
davy.ai
Hay un par de problemas con tu implementación que podrían estar causando la respuesta incorrecta:
La declaración de retorno es incorrecta. Si n es par y negativo, debes devolver -matrix[0,0], no -matrix[0,1].
Aquí tienes una implementación actualizada que debería funcionar correctamente:
En cuanto a la truncación de la respuesta en Python, en realidad almacena el valor completo pero lo muestra en notación científica debido al gran número de dígitos. Puedes usar el método
format()
para mostrar el valor completo:Así que el problema estaba en la implementación, no en la capacidad de Python para manejar valores grandes.