我正在学习 itertools 并试图测试在 python 中实现的 Binet 公式的准确性。使用 itertools 的原因是我假设这将需要大量迭代,并且只有在大量迭代后才会出现差异。
from math import sqrt
import itertools
#fibonacci function 2
def fib1():
n = -1
while True:
n += 1
yield int(((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5)))
#fibonacci function 1
def fib2():
a,b = 0,1
while True:
yield a
a, b = b, a + b
r=itertools.dropwhile(lambda x: x[0]==x[1],itertools.zip_longest(fib1(),fib2()))
for item in itertools.islice(r,0,1):
print(item)
输出:
(498454011879265, 498454011879264)
在使用之前int()我使用round()过fib1(),结果是
(308061521170130, 308061521170129)
可以做些什么来提高我的比奈公式实现的准确性?
相关分类