我正在使用numba.jit
编译器加速循环函数的计算。但我发现,如果我使用不带@jit
的函数,我会得到正确的答案,即两个float32
个数字,但如果我使用@jit
或@jit('UniTuple(float32, 2)(float32, float32)', nopython=True)
,我获取float
类型数字类型的结果,其精度高于应有的结果。第一个数字的结果应为-0.0125
。
如何解决这个问题,以便我拥有正确的数字?为什么它与@jit
不同而没有?
gE = np.array([-0.0125], dtype=np.float32)
gP = np.array([0.01533981], dtype=np.float32)
@jit('UniTuple(float32, 2)(float32, float32)', nopython=True)
def findEP(TE, TP):
E, P = 0,0
delR = 999
for i, (e, p) in enumerate (zip(gE, gP)):
temp = np.sqrt( (TE - e )**2 + (TP - p )**2)
if (temp < delR):
delR = temp
E, P = e, p
return E, P
findEP(-0.0125, 0.01533981)
(-0.012500000186264515, 0.015339810401201248)
并且没有@jit用于相同的功能:
gE = np.array([-0.0125], dtype=np.float32)
gP = np.array([0.01533981], dtype=np.float32)
#@jit('UniTuple(float32, 2)(float32, float32)', nopython=True)
def findEP(TE, TP):
E, P = 0,0
delR = 999
for i, (e, p) in enumerate (zip(gE, gP)):
temp = np.sqrt( (TE - e )**2 + (TP - p )**2)
if (temp < delR):
delR = temp
E, P = e, p
return E, P
findEP(-0.0125, 0.01533981)
(-0.0125, 0.01533981)