为了账号安全,请及时绑定邮箱和手机立即绑定

Golang Fibonacci 计算出现关闭

Golang Fibonacci 计算出现关闭

Go
慕莱坞森 2021-08-30 14:28:09
我目前有以下用于斐波那契计算的代码。我正在尝试计算大量数字,但是一旦达到 100,就会出现计算中断。对于fib(100),我的代码返回3736710778780434371,但是当我查看其他来源时,它告诉我正确的计算应该是354224848179261915075。我的代码有问题还是与我的计算机硬件或其他什么有关?package mainimport "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))}
查看完整描述

2 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

您遇到了整数溢出!您最多只能使用 auint的大小进行计算uint;一旦你超越了它的界限,它就会(默默地)再次绕回原处。

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

如果您将得到的答案和正确答案转换为十六进制,那么您会发现情况确实如此。你结束了

  33DB76A7C594BFC3

而正确的答案是

1333DB76A7C594BFC3

请注意,就其而言,您的答案是正确的……只是还远远不够。你只得到了答案的低 64 位;你错过了另一个 13*2 64

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


查看完整回答
反对 回复 2021-08-30
  • 2 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信