Python在处理大浮点数和整数时防止溢出错误

Pro*_*ogo 5 python optimization integer-overflow sequence fibonacci

我正在开发一个 python 程序来计算斐波那契数列中的数字。这是我的代码:

import math
def F(n):
    return ((1+math.sqrt(5))**n-(1-math.sqrt(5))**n)/(2**n*math.sqrt(5))
def fib(n):
    for i in range(n):
        print F(i)
Run Code Online (Sandbox Code Playgroud)

我的代码使用这个公式来查找斐波那契数列中的第 N 个数字:

在此处输入图片说明

这可以计算斐波那契数列中的许多数字,但我确实遇到了溢出错误。

如何改进此代码并防止溢出错误?

注意:我使用的是 python 2.7。

A.J*_*pal -2

您对“我如何改进此代码...”的陈述有点含糊,所以我将其理解为缩短您的代码:

import math
def fib(j):
    for i in [int(((1+math.sqrt(5))**n-(1-math.sqrt(5))**n)/(2**n*math.sqrt(5))) for n in range(j)]: print i
Run Code Online (Sandbox Code Playgroud)

您可以将两个函数组合起来形成一个函数,并使用列表理解,您可以使该函数在一行中运行。

如果您正在处理非常大的数字,则无法防止溢出错误,而是尝试捕获它们然后中断:

import math
def fib(j):
        try:
                for i in [int(((1+math.sqrt(5))**n-(1-math.sqrt(5))**n)/(2**n*math.sqrt(5))) for n in range(j)]: print i
        except Exception as e:
                print 'There was an error, your number was too large!'
Run Code Online (Sandbox Code Playgroud)

第二个将首先循环所有内容并确保没有错误,如果没有,它将继续打印它。