Go – 分割 big.Float

huangapple go评论104阅读模式
英文:

Go - Divide big.Float

问题

我正在处理需要使用big.Float类型的数字,并且需要对它们进行除法运算。我知道big.Int有一个.Div()函数,但如果我没记错的话,它会截断值并且丢失使用big.Float时的精度。

相关代码

func e(prec int64) (res *big.Float) {
	res = big.NewFloat(float64(1.0))
	base := big.NewInt(prec)

	for i := base; i.Cmp(big.NewInt(int64(0))) == 1; _ = i.Sub(i, big.NewInt(1)) {
		d := big.NewFloat(float64(1.0))
		_ = d.Div(fact(i)) // 这里有错误
		res.Add(d)
	}

	return
}
英文:

I'm dealing with numbers that require a big.Float type, and I need to divide them. I'm aware that big.Int has a .Div() function, but if I'm correct, that truncates the value and loses the precision I get from using big.Float.

Relevant code

func e(prec int64) (res *big.Float) {
	res = big.NewFloat(float64(1.0))
	base := big.NewInt(prec)

	for i := base; i.Cmp(big.NewInt(int64(0))) == 1; _ = i.Sub(i, big.NewInt(1)) {
		d := big.NewFloat(float64(1.0))
		_ = d.Div(fact(i)) // error here
		res.Add(d)
	}

	return
}

答案1

得分: 34

使用Float.Quo进行big.Float的除法运算:

x, y := big.NewFloat(10), big.NewFloat(3)
z := new(big.Float).Quo(x, y)

http://play.golang.org/p/GRPAKQNkq0

英文:

Use Float.Quo for big.Float division:

x, y := big.NewFloat(10), big.NewFloat(3)
z := new(big.Float).Quo(x, y)

http://play.golang.org/p/GRPAKQNkq0

huangapple
  • 本文由 发表于 2016年4月22日 23:28:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/36797819.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定