无论传递的参数是整数、浮点数还是任何数字,我都需要以尽可能高的精度进行计算。我能想到的一种方法是:
import numpy as np
def foo(x, y, z)
a = (np.float64)0
a = x + y * z
我可以看到一些问题:1)我认为我需要转换输入,而不是结果才能工作 2)看起来很难看(第一个操作是多余的 C 样式声明)。
如何以最高可用精度以 python 方式执行所有计算,然后以最高可用精度(即 IMO numpy.float64)存储结果?
对我来说,显而易见的答案是十进制,除非函数需要非常快。
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)
您可以声明变量,但您可以尝试强制它为预期类型
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)