Python math.sqrt丢失精度

时间:2013-03-29 02:04:19

标签: python

我试图获得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() 

2 个答案:

答案 0 :(得分:2)

Python数学库函数是围绕C数学库函数的瘦包装器,因此Python在进行计算之前将长整数转换为双倍大小的浮点数。如果您想在Python中使用真正的多精度算法,可以试试mpmath

答案 1 :(得分:2)

>>> import decimal
>>> decimal.getcontext().prec = 100
>>> a=decimal.Decimal(410241186411534352)**decimal.Decimal(.5)
>>> print a
640500730.9999999929742468943411712910588335443486974564849183256021518032770726219326459594197730639
>>> print a*a
410241186411534352.0000000000000000000000000000000000000000000000000000000000000000000000000000000000
>>>