栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Golang中小数平方根的任意精度

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang中小数平方根的任意精度

这是我自己的平方根计算实现。在等待答案时,我决定尝试一下计算平方根的方法。它有很多方法,但最后我发现通过减法
pdf 链接到
平方根,这是我非常喜欢的,因为算法的描述只有几行(相比之下,我之前从未见过)牛顿的方法)。

所以这是我的实现(bigint不能很好地配合使用):

func square(n int64, precision int64) string{    ans_int := strconv.Itoa(int(math.Sqrt(float64(n))))    limit   := new(big.Int).Exp(big.NewInt(10), big.NewInt(precision + 1), nil)    a       := big.NewInt(5 * n)    b       := big.NewInt(5)    five    := big.NewInt(5)    ten     := big.NewInt(10)    hundred := big.NewInt(100)    for b.Cmp(limit) < 0{        if a.Cmp(b) < 0{     a.Mul(a, hundred) tmp := new(big.Int).Div(b, ten) tmp.Mul(tmp, hundred) b.Add(tmp, five)        } else { a.Sub(a, b) b.Add(b, ten)        }    }    b.Div(b, hundred)    ans_dec := b.String()    return ans_dec[:len(ans_int)] + "." + ans_dec[len(ans_int):]}

PS 感谢您Nick Nickig-Wood用您的惊人注释使代码变得更好。

并使用它可以发现

square(8537341, 50)

2921.8728582879851242173838229735693053765773170487

这只是python的最后一位

getcontext().prec = 50print str(Decimal(8537341).sqrt())

2921.8728582879851242173838229735693053765773170488

该数字不可用,因为最后一位数字不是很精确。

一如既往

[Go Playground](http://play.golang.org/p/u1CoB4cwXy)

PS ,如果有人发现一个原生的方式来做到这一点,我很乐意给我的接受和给予好评。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401483.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号