@jit меняет результат функции - PullRequest
0 голосов
/ 30 апреля 2018

Я ускоряю вычисления для функции с циклом, используя 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)
...