4

long int の sqrt 値を取得しようとしました

from math import sqrt
print sqrt(410241186411534352) 

<< 640500731.0

640500731.0 が返されましたが、これは正確には 640500730.999999993... です。それを修正する方法は?

@DSM と @Rob の返信に従って解決しました。どうもありがとうございました。

from math import sqrt
from decimal import Decimal
print Decimal(410241186411534352).sqrt() 
4

2 に答える 2

4
>>> import decimal
>>> decimal.getcontext().prec = 100
>>> a=decimal.Decimal(410241186411534352)**decimal.Decimal(.5)
>>> print a
640500730.9999999929742468943411712910588335443486974564849183256021518032770726219326459594197730639
>>> print a*a
410241186411534352.0000000000000000000000000000000000000000000000000000000000000000000000000000000000
>>> 
于 2013-03-29T02:30:23.943 に答える
2

Python 数学ライブラリ関数は C 数学ライブラリ関数のシン ラッパーであるため、Python は計算を行う前に long 整数を double サイズの浮動小数点数に変換します。Python で本物の多倍精度演算が必要な場合は、mpmathを試すことができます。

于 2013-03-29T02:11:58.177 に答える