亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何提高大 n 的斐波那契實現的準確性?

如何提高大 n 的斐波那契實現的準確性?

BIG陽 2022-10-05 09:37:15
我正在使用比奈公式來計算大n的斐波那契數列比奈公式:我的代碼:#!/usr/bin/env python3def calc_fib(n):  if (n <= 1):  return n  root_5    = 5 ** 0.5  phi_n   = ((root_5 + 1) / 2) ** n  alpha_n = ((root_5 - 1) / 2) ** n  fn = round((phi_n - alpha_n) / root_5)  return fnn = int(input())print(calc_fib(n))$ ./fibonacci.py 200 280571172992512015699912586503521287798784.(錯誤)正確的結果是:280571172992510140037611932413038677189525問題是,對于非常大的n,比如說n = 200,結果不準確,我認為由于浮點計算,我該如何更改我的代碼,以便我可以獲得更準確的結果?
查看完整描述

2 回答

?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊


Binet公式的問題在于,您需要提高準確性才能進行計算,而浮點數并不能為您提供這一點。


有幾種方法可以有效地計算斐波那契數列。這是我最喜歡的,它不是(明確地)迭代的,并且具有大致正確的運行時復雜性:


def fib(n):

    X = 1<<(n+2)

    return pow(X, n+1, X*X-X-1) % X

這使用具有與n線性增長的位數的算術,我認為這是可以的,因為結果的位數線性增長。

替代的 log(n) 方法是使用加倍公式,使用 Binet 公式的整數版本(通常在代數環中)或矩陣冪。我有一篇博客文章更詳細地描述了它們:https://blog.paulhankin.net/fibonacci2/


查看完整回答
反對 回復 2022-10-05
?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

我想你想根據公式糾正:alpha_n

alpha_n = ((1 - root_5) / 2) ** n


查看完整回答
反對 回復 2022-10-05
  • 2 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號