平方根的任意精度

时间:2012-05-23 18:09:46

标签: python math

decimal.Decimal(math.sqrt(2))屈服于

时,我感到非常失望
Decimal('1.4142135623730951454746218587388284504413604736328125')

并且小数点后15位的数字错误。 (尽管很高兴地给你超过15位数!)

如何在Python中m的十进制扩展中获取第一个sqrt(n) 正确的数字?

4 个答案:

答案 0 :(得分:48)

在十进制

上使用sqrt方法
>>> from decimal import *
>>> getcontext().prec = 100
>>> Decimal(2).sqrt()
Decimal('1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573')
>>> 

答案 1 :(得分:7)

您可以尝试bigfloat。项目页面中的示例:

from bigfloat import *
sqrt(2, precision(100))  # compute sqrt(2) with 100 bits of precision

答案 2 :(得分:4)

IEEE标准双精度浮点数只有16位精度。任何使用IEEE的软件/硬件都无法做得更好:

http://en.wikipedia.org/wiki/IEEE_754-2008

您需要一个特殊的BigDecimal类实现,并实现所有数学函数以使用它。 Java有这样的事情。 Python也是这样做的:

http://en.literateprograms.org/Arbitrary-precision_elementary_mathematical_functions_%28Python%29

答案 3 :(得分:0)

  

如何在Python中获取sqrt(n)的十进制扩展中的前m个正确数字?

一种方法是计算数字integer square root乘以所需的10次幂。例如,要查看sqrt(2)的前20个小数位,您可以这样做:

>>> from gmpy2 import isqrt
>>> num = 2
>>> prec = 20
>>> isqrt(num * 10**(2*prec)))
mpz(141421356237309504880)

使用维基百科页面上提供的算法,isqrt函数实际上很容易实现。