26

decimal.Decimal(math.sqrt(2))屈服时我很失望

Decimal('1.4142135623730951454746218587388284504413604736328125')

并且小数点后 15 位之后的数字是错误的。(尽管很高兴给你超过 15 位数!)

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

4

4 回答 4

63

使用sqrtDecimal 上的方法

>>> from decimal import *
>>> getcontext().prec = 100  # Change the precision
>>> Decimal(2).sqrt()
Decimal('1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573')
于 2012-05-23T18:16:38.873 回答
7

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

from bigfloat import *
sqrt(2, precision(100))  # compute sqrt(2) with 100 bits of precision
于 2012-05-23T18:12:34.577 回答
4

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

http://en.wikipedia.org/wiki/IEEE_754-2008

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

https://literateprograms.org/arbitrary-precision_elementary_mathematical_functions__python_.html

于 2012-05-23T18:12:03.320 回答
1

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

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

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

isqrt使用维基百科页面上提供的算法,该功能实际上很容易实现。

于 2015-09-18T12:02:53.397 回答