decimal.Decimal(math.sqrt(2))
屈服于
Decimal('1.4142135623730951454746218587388284504413604736328125')
并且小数点后15位的数字错误。 (尽管很高兴地给你超过15位数!)
如何在Python中m
的十进制扩展中获取第一个sqrt(n)
正确的数字?
答案 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
函数实际上很容易实现。