猿问

Golang Fibonacci 计算出现关闭

我目前有以下用于斐波那契计算的代码。我正在尝试计算大量数字,但是一旦达到 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))

}


慕莱坞森
浏览 221回答 2
2回答

慕哥6287543

您遇到了整数溢出!您最多只能使用 auint的大小进行计算uint;一旦你超越了它的界限,它就会(默默地)再次绕回原处。在您的情况下, a 看起来好像uint是 64 位长。(它的大小取决于您运行的平台。)这意味着您将能够存储高达 2&nbsp;64&nbsp;-1 的值。如果再添加一个,它将返回到 0,并且不会返回错误。如果您将得到的答案和正确答案转换为十六进制,那么您会发现情况确实如此。你结束了&nbsp;&nbsp;33DB76A7C594BFC3而正确的答案是1333DB76A7C594BFC3请注意,就其而言,您的答案是正确的……只是还远远不够。你只得到了答案的低 64 位;你错过了另一个 13*2&nbsp;64。要纠正它,您需要使用Package big 中的任意大小整数,而不是uint.
随时随地看视频慕课网APP

相关分类

Go
我要回答