26

decimal.Decimal(math.sqrt(2))屈服したときはかなりがっかりしました

Decimal('1.4142135623730951454746218587388284504413604736328125')

小数点以下15桁以降の桁が間違っていました。(15桁をはるかに超える数字を喜んで提供しているにもかかわらず!)

Pythonでの小数展開で最初のm 正しい桁を取得するにはどうすればよいですか?sqrt(n)

4

4 に答える 4

63

Decimalのメソッドを使用しますsqrt

>>> 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個の正しい桁を取得するにはどうすればよいですか?

1つの方法は、必要な10の累乗を掛けた数値の整数平方根を計算することです。たとえば、の小数点以下20桁を表示するには、次のsqrt(2)ようにします。

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

このisqrt関数は、実際にはWikipediaページで提供されているアルゴリズムを使用して自分で実装するのは非常に簡単です。

于 2015-09-18T12:02:53.397 に答える