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后端口)。