加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

算法 – Golang Fibonacci计算出现

发布时间:2020-12-16 09:28:17 所属栏目:大数据 来源:网络整理
导读:我目前有以下代码用于我的斐波纳契计算.我正在尝试计算大数字,但是一旦达到100,就会出现计算结果.对于fib(100),我的代码返回3736710778780434371,但是当我查看其他来源时,它告诉我正确的计算应该是354224848179261915075.我的代码中是否有问题或者它与我的计
我目前有以下代码用于我的斐波纳契计算.我正在尝试计算大数字,但是一旦达到100,就会出现计算结果.对于fib(100),我的代码返回3736710778780434371,但是当我查看其他来源时,它告诉我正确的计算应该是354224848179261915075.我的代码中是否有问题或者它与我的计算机硬件或其他什么有关?

package main
import "fmt"

func fib(N uint) uint{


  var table []uint
  table = make([]uint,N+1)
  table[0] = 0
  table[1] = 1


  for i := uint(2); i <= N; i += 1 {

     table[i] = table[i-1] + table[i-2]


  }

  return table[N]

}

func main() {
   fmt.Println(fib(100))
}

解决方法

你正在整数溢出!您只能使用uint的大小来计算;一旦你超越它的界限,它将(静静地)再次回绕.

在你的情况下,看起来好像是一个64位长的uint. (它的大小取决于您运行的平台.)这意味着您将能够存储高达264-1的值.如果再添加一个,它将回绕到0,并且不会返回错误.

如果你将你得到的答案和正确的答案转换为十六进制,那么你会看到情况就是如此.你结束了

33DB76A7C594BFC3

而正确答案是

1333DB76A7C594BFC3

请注意,你的答案是正确的…它只是不够远.你只得到答案的低64位;你错过了其他的13 * 264.

要更正它,您需要使用Package big中的任意大小的整数,而不是uint.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读