decimal.Decimal(math.sqrt(2))
屈服时我很失望
Decimal('1.4142135623730951454746218587388284504413604736328125')
并且小数点后 15 位之后的数字是错误的。(尽管很高兴给你超过 15 位数!)
如何在 Python的十进制扩展中获得第一个m
正确的数字?sqrt(n)
>>> from decimal import *
>>> getcontext().prec = 100 # Change the precision
>>> Decimal(2).sqrt()
Decimal('1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573')
你可以试试bigfloat。项目页面的示例:
from bigfloat import *
sqrt(2, precision(100)) # compute sqrt(2) with 100 bits of precision
IEEE 标准双精度浮点数只有 16 位精度。任何使用 IEEE 的软件/硬件都不能做得更好:
http://en.wikipedia.org/wiki/IEEE_754-2008
您需要一个特殊的 BigDecimal 类实现,并实现所有数学函数来使用它。Python有这样一个东西:
https://literateprograms.org/arbitrary-precision_elementary_mathematical_functions__python_.html
如何在 Python 中获取 sqrt(n) 的十进制扩展中的前 m 个正确数字?
一种方法是计算数字的整数平方根乘以所需的 10 次方。例如,要查看 的前 20 位小数sqrt(2)
,您可以执行以下操作:
>>> from gmpy2 import isqrt
>>> num = 2
>>> prec = 20
>>> isqrt(num * 10**(2*prec)))
mpz(141421356237309504880)
isqrt
使用维基百科页面上提供的算法,该功能实际上很容易实现。