我的Javascript和Python代码是否由于指数或其他原因给了我不同的答案?

问题描述 投票:0回答:2

我已经将一个简单的算法从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 ..

在Javascript代码中使用Math.pow()并没有什么改变。

javascript python-3.x exponent
2个回答
1
投票

[我首先注意到的是,您有时使用“ **”进行取幂,有时使用“ ^”。前者是您应同时用于python和javascript的内容(或至少根据w3学校的说法,但无论如何它们会为我产生不同的结果)我假设您不是要使用按位“ XOR”运算符,而是要在编写“ ^”时使用指数,因为您在python和js中都键入了不同的符号……

当我在计算机上将所有“ ^”实例更改为“ **”时,两种算法均返回0.2361


0
投票

请注意,它们不是相同的公式。

在您的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
© www.soinside.com 2019 - 2024. All rights reserved.