python 任意精度的平方根

0s0u357o  于 2022-12-28  发布在  Python
关注(0)|答案(5)|浏览(166)

decimal.Decimal(math.sqrt(2))屈服时,我非常失望

Decimal('1.4142135623730951454746218587388284504413604736328125')

而小数点后第15位的数字结果是错误的。(尽管很高兴给你的数字远不止15位!)
在Python中,我怎样才能得到sqrt(n)的十进制展开中的第一个m * 正确 * 位数?

ssm49v7z

ssm49v7z1#

对Decimal使用sqrt方法

>>> from decimal import *
>>> getcontext().prec = 100  # Change the precision
>>> Decimal(2).sqrt()
Decimal('1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573')
vql8enpb

vql8enpb2#

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

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

8yparm6h3#

IEEE标准双精度浮点数只有16位精度,任何使用IEEE的软件/硬件都不能做得更好:
http://en.wikipedia.org/wiki/IEEE_754-2008
你需要一个特殊的BigDecimal类实现,所有的数学函数都要实现来使用它。
https://literateprograms.org/arbitrary-precision_elementary_mathematical_functions__python_.html

3vpjnl9f

3vpjnl9f4#

在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)

使用Wikipedia页面上提供的算法,您自己实际上很容易实现isqrt函数。

mwg9r5ms

mwg9r5ms5#

你可以在python3中得到平方根的十进制展开的前m个正确的数字,只需要使用一个特定的sqr算术函数,比如:
平方(“2.0”,100)“1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727”
https://github.com/giocip/sqrt/blob/main/sqr.py
还带有num7包和以下代码:

from num7 import Num  
n = Num('2.0')  
root = n.sqrt(100)  # set 100 digits after decimal point  
print(root)  # 1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727

相关问题