我正在寻找一种以任意精度(例如点后50位数左右)计算平方根的方法。
在python中,可以使用Decimal轻松访问它:
from decimal import *
getcontext().prec = 50
Decimal(2).sqrt() # and here you go my 50 digits
看到强大的功能后,math/big
我浏览了文档,但没有发现任何类似的内容。
因此,我唯一的选择是编写某种数值计算方法,该方法将迭代地尝试计算答案吗?
这是我自己的平方根计算实现。在等待答案时,我决定尝试一下计算平方根的方法。它有很多方法,但最后我发现通过减法
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 = 50
print str(Decimal(8537341).sqrt())
2921.8728582879851242173838229735693053765773170488
该数字不可用,因为最后一位数字不是很精确。
一如既往[Go Playground](http://play.golang.org/p/u1CoB4cwXy)
。
PS ,如果有人发现一个原生的方式来做到这一点,我很乐意给我的接受和给予好评。
当 小数点后15位的数字被证明是错误的。(尽管很高兴给你的数字远远超过15位!) 在Python中,如何获得的十进制扩展中的第一个正确数字?
问题内容: 根据Python整数范围内的答案,Python)应该具有“任意精度整数” 。但是这个结果显然 不是 任意精度: 根据PEP 237 ,它是任意大的(不仅仅是C类型的大小)。和维基百科说,Python的是任意精度。 那么,为什么以上代码行的结果不正确? 问题答案: 实际上,在python3中,每当您对int进行除法运算时,都会得到float。有一个执行整数除法的运算符: 这确实给出了正确
我正在用C实现一个任意精度的算术库,在实现gamma函数的时候我陷入了困境。 通过分别使用等价 和 ,我可以得到所有实数值 的范围内 的有理数 。 但是,我不知道如何计算。对于Lanczos近似(https://en.wikipedia.org/wiki/Lanczos_approximation),我需要预先计算的值p,这些值恰好计算非整数值的阶乘(?!),并且以我目前的知识无法动态计算……在实
我想找出一个数的因子数,比如900,小于它的平方根。例如:900的因子有27个,我想找出小于900根的因子数,即30个,它们是1,2,3,4,5,6,9,10,12,15,18,20,25。 我目前有这个程序,通过计算质因数来找到因数的数量。例如:140的质因数是:2^2*5*7。所以因子数是:(2+1)(1+1)(1+1)[素因子的乘方]
问题内容: 我有一个numpy的2d数组[中/大型- 例如500x500]。我想找到它的元素智能指数的特征值。问题在于某些值是非常负的(-800,-1000等),并且它们的指数下溢(意味着它们非常接近零,因此numpy将其视为零)。无论如何在numpy中使用任意精度? 我做梦的方式: 我已经搜索了gmpy和mpmath的解决方案,但无济于事。任何想法都将受到欢迎。 问题答案: SymPy可以计算任
问题内容: 在python或标准库中的某个地方是否存在整数平方根?我希望它是准确的(即返回一个整数),如果没有解决办法,可以吠叫。 此刻,我滚动了自己的幼稚: 但这很丑陋,我不太相信大整数。我可以遍历正方形,如果超出了该值,则放弃,但是我认为做这样的事情有点慢。另外我想我可能正在重新发明轮子,像这样的东西肯定已经存在于python中了… 问题答案: 牛顿的方法在整数上工作得很好: 这将返回的最大整