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 在进行计算之前将长整数转换为双倍大小的浮点数。如果您想在 Python 中使用真正的多精度算术,您可以尝试mpmath

于 2013-03-29T02:11:58.177 回答