无论输入类型如何,如何在Python中执行精确计算?

时间:2013-06-03 08:26:57

标签: python numpy precision

我需要以尽可能高的精度进行计算,无论传递的参数是整数,浮点数还是其他数字。我能想到的一个方法是:

import numpy as np
def foo(x, y, z)
a = (np.float64)0
a = x + y * z

我可以看到以下几个问题:1)我认为我需要转换输入,而不是为此工作的结果2)看起来很难看(第一个操作是多余的C风格声明)。

如何以最高可用精度进行pythonically执行所有计算,然后以最高可用精度(IMO numpy.float64)存储结果?

2 个答案:

答案 0 :(得分:2)

对我而言,显而易见的答案是Decimal,除非函数需要非常快。

import decimal
# set the precision to double that of float64.. or whatever you want.
decimal.setcontext(decimal.Context(prec=34))
def foo(x, y, z)
    x,y,z = [decimal.Decimal(v) for v in (x,y,z)] 
    a = x + y * z
    return a  # you forgot this line in the original code.

如果你想要一个传统的64位浮点数,你只需将返回值转换为:         return float(a)

答案 1 :(得分:1)

您可以声明变量,但您可以尝试将其强制为预期类型

import numpy as np
def foo(*args):
    x, y, z = map(np.longdouble, args)
    return x + y * z

foo(0.000001,0.000001, 0.00000000001)