Python 平方根的任意精度

Python 平方根的任意精度,python,math,Python,Math,当decimal.decimal(math.sqrt(2)) Decimal('1.4142135623730951454746218587388284504413604736328125') 小数点后15位的数字被证明是错误的。(尽管很高兴给你的数字远远超过15位!) 如何在Python中的sqrt(n)十进制扩展中获得第一个m正确数字?IEEE标准双精度浮点数只有16位精度。任何使用IEEE的软件/硬件都不能做得更好: 您需要一个特殊的BigDecimal类实现,并实现所有数学函数来使用

decimal.decimal(math.sqrt(2))

Decimal('1.4142135623730951454746218587388284504413604736328125')
小数点后15位的数字被证明是错误的。(尽管很高兴给你的数字远远超过15位!)


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

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

您需要一个特殊的BigDecimal类实现,并实现所有数学函数来使用它。Java有这样的东西。Python也有:

你可以试试。项目页面中的示例:

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

对十进制使用
sqrt
方法

>>> from decimal import *
>>> getcontext().prec = 100
>>> Decimal(2).sqrt()
Decimal('1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573')
>>> 
在Python中,如何获得sqrt(n)的十进制扩展中的前m个正确数字

一种方法是计算数字乘以所需的10次方。例如,要查看
sqrt(2)
的前20位小数,可以执行以下操作:

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

使用Wikipedia页面上提供的算法,
isqrt
函数实际上非常容易实现。

+1显示如何更改精度。我删除了我自己的答案,以支持这一条。我想我们的答案一定是在我
pydoc
ing如何设置精度时在帖子中出现的错误;-)低默认十进制精度刚刚在谷歌代码堵塞中咬了我一口。现在我知道你可以设置它了+1.这正是
decimal
模块计算
decimal(2.sqrt()
:-)所做的@马克:很高兴知道。虽然,上次我试过它,但它比“手动”要慢得多。是的,Python2十进制模块是纯Python的,它的速度从未为人所知。在Python3中应该更好一些(或者在Python2中使用
cdecimal
PyPI后端口)。