Мой код Javascript и Python дает мне разные ответы из-за показателей или что-то еще? - PullRequest
0 голосов
/ 11 февраля 2020

Я перенес простой алгоритм с Python3 на Javascript, и неожиданно я получаю разные ответы. Код Python работает должным образом, и я не знаю, почему Javascript действует по-другому.

Вот Python:

def foo():
    theArray = [1,2,3,4,5,6]
    a = theArray[0]
    b = theArray[1]
    c = theArray[2]
    d = theArray[3]
    e = theArray[4]
    f = theArray[5]
    res = (((a**2 + b**2 - (d - e)^3 + (b//e)^2)/ ((a**2 + b**2 - (d - e)^3) + c**2 + (f-4)^2 + (c//d)^2))*0.75)
    return res

Python3 Результат: 0,32 ..

Вот код Javascript:

function foo() {
    theArray = [1,2,3,4,5,6]
    var a, b, c, d, e, f
    a = theArray[0]
    b = theArray[1]
    c = theArray[2]
    d = theArray[3]
    e = theArray[4]
    f = theArray[5]
    res = (((a**2 + b**2 - (d - e)**3 + (b/e)**2)/ ((a**2 + b**2 - (d - e)**3) + c**2 + (f-4)**2 + (c/d)^2))*0.75)
    return res
}

Javascript Результат: 0,27 ..

Использование Math.pow () в коде Javascript ничего не изменилось.

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Обратите внимание, что они не являются одинаковыми формулами.

В вашем коде python есть:

res = (((a**2 + b**2 - (d - e)^3 + (b//e)^2) / ((a**2 + b**2 - (d - e)^3) + c**2 + (f-4)^2 + (c//d)^2))*0.75

, который имеет (d - e)^3 и (b//e)^2 и (f-4)^2

В вашем js коде у вас есть:

res = (((a**2 + b**2 - (d - e)**3 + (b/e)**2) / ((a**2 + b**2 - (d - e)**3) + c**2 + (f-4)**2 + (c/d)^2))*0.75)

Который вместо (d - e)**3 и (b//e)**2 и (f-4)**2

Операция XOR сильно отличается операция из экспонент.

Также обратите внимание, что в python у вас много целочисленных делений. В javascript эквивалент будет выглядеть примерно так:

(Math.floor(b/e))^2

Таким образом, правильная формула js должна быть:

res = (((a**2 + b**2 - (d - e)^3 + Math.floor(b/e)^2) / ((a**2 + b**2 - (d - e)^3) + c**2 + (f-4)^2 + Math.floor(c/d)^2))*0.75
1 голос
/ 11 февраля 2020

Первое, что я замечаю, вы иногда используете «**» для возведения в степень, а иногда «^». Первое - это то, что вы должны использовать как для python, так и для javascript (или, по крайней мере, согласно школам w3, но в любом случае они дают разные результаты для меня)
Я предполагаю, что вы не хотите использовать побитовое Оператор «XOR», а скорее показатель степени, когда вы пишете «^», поскольку вы набрали разные символы как в python, так и в js…

Когда я изменяю все вхождения «^» на «* * "на моем компьютере оба алгоритма возвращают 0.2361

...