gpt4 book ai didi

go - Go 中的 float 精度

转载 作者:IT王子 更新时间:2023-10-29 01:51:18 32 4
gpt4 key购买 nike

<分区>

此问题是 a previous question I asked 的后续问题.我收到的答案建议我使用 Go math.Big 库。在这个问题中,我使用了这个库,但不幸的是收效甚微。

我正在尝试使用 Binet 公式来计算 fib(100)。我在用Go 的 Big.Float 但没有成功。我得到精确到小数点后 10 位地方。请指教。

我正在努力避免循环/递归,因为我认为这些方法会不能很好地扩展。因此我尝试利用 Binet 的公式

//当前随着输入的增加产生不准确的结果。

package main

import (
"fmt"
"math/big"
"math"
"strconv"
)

func fib(n int) float64 {
var sroot5 = new(big.Float).SetPrec(200).SetFloat64(2.236067977499789696409173668731276235440618359611525724270897)
var phi = new(big.Float).SetPrec(200).SetFloat64(1.61803398874989484820458683436563811772030917980576286213544862)
var minusPhi = new(big.Float).SetPrec(200).SetFloat64(-0.61803398874989484820458683436563811772030917980576)

var fltP float64;
fltP, _ = phi.Float64()

var fltN float64;
fltN, _ = minusPhi.Float64()

var denom float64
denom, _ = sroot5.Float64()

// Magic fib formula (Binet) is:
// (Phi ^ n - (-phi ^ n)) / sqrt(5)

z := (math.Pow(fltP, float64(n)) - math.Pow(fltN, float64(n))) / denom

return math.Ceil(z)

}

func main() {

fib(100)

fmt.Println(strconv.FormatFloat(fib(100), 'f', 0, 64))
fmt.Println("true answer of fib(100) should be -> 354224848179261915075")

}

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com