decimal.Decimal(math.sqrt(2))
屈服したときはかなりがっかりしました
Decimal('1.4142135623730951454746218587388284504413604736328125')
小数点以下15桁以降の桁が間違っていました。(15桁をはるかに超える数字を喜んで提供しているにもかかわらず!)
Pythonでの小数展開で最初のm
正しい桁を取得するにはどうすればよいですか?sqrt(n)
bigfloatを試すことができます。プロジェクトページの例:
from bigfloat import *
sqrt(2, precision(100)) # compute sqrt(2) with 100 bits of precision
IEEE標準の倍精度浮動小数点数の精度は16桁のみです。IEEEを使用するソフトウェア/ハードウェアは、これ以上の効果はありません。
http://en.wikipedia.org/wiki/IEEE_754-2008
特別なBigDecimalクラスの実装が必要であり、それを使用するにはすべての数学関数が実装されています。Pythonにはそのようなものがあります:
https://literateprograms.org/arbitrary-precision_elementary_mathematical_functions__python_.html
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ページで提供されているアルゴリズムを使用して自分で実装するのは非常に簡単です。