2017-06-28 28 views
0

Pythonで2つの10進数のオブジェクトを掛けようとすると、精度が低下します。これをどうすれば解決できますか?PythonでDecimalを掛けるときの精度の損失

u = Decimal("1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727350138462309122970249248360558507372126441214970999358314132") 
    y = Decimal(10**100) 
    z = u*y 
    str(int(z)) 
=> '14142135623730950488016887240000000000000000000000000000000000000000000000000000000000000000000000000' 
+0

'u * y'製品を' int 'にキャストするので正確さが失われていると思います。 – taras

答えて

4

10進intであるように、任意の精度ではなく、精度の小数の固定が、可変数を有しています。これはデフォルトでは28ですが、現時点であなたの番号が切り取られている場所です。

これを変更するには、decimal.getcontext().prec=128または必要な精度に変更します。詳細については、documentationを参照してください。

+0

ありがとうございました。私はprec = 210 xDを使用しなければならなかった – archit

1

「は、ハードウェアベースの2進浮動小数点とは異なり、小数モジュールは、与えられた問題のために必要なだけ大きくすることができます(28ヶ所をデフォルト)ユーザーに変更可能な精度を持っている」

あなたは(decimal.getcontext().prec = 256を呼び出していることを変えることができますまたはあなたの目的に合った他の値)