Javascript在Python中给同一个算法提供了不同的答案

前端之家收集整理的这篇文章主要介绍了Javascript在Python中给同一个算法提供了不同的答案前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究Rosalind问题 Mortal Fibonacci Rabbits,网站不断告诉我,当我使用我的算法编写的JavaScript时,我的答案是错误的.当我在Python中使用相同的算法时,我得到一个不同的(正确的)答案.

不一致只会在结果变大时发生.例如,fibd(90,19)在JavaScript中返回2870048561233730600,但在Python中,我得到2870048561233731259.

有没有关于JavaScript中的数字的东西,给我一个不同的答案,或者在我的JavaScript代码中犯了一个微妙的错误

JavaScript解决方案:

function fibd(n,m) {
    // Create an array of length m and set all elements to 0
    var rp = new Array(m);
    rp = rp.map(function(e) { return 0; });
    rp[0] = 1;

    for (var i = 1; i < n; i++) {
        // prepend the sum of all elements from 1 to the end of the array
        rp.splice(0,rp.reduce(function (e,s) { return s + e; }) - rp[0]);
        // Remove the final element
        rp.pop();
    }

    // Sum up all the elements
    return rp.reduce(function (e,s) { return s + e; });
}

Python解决方案:

def fibd(n,m):
    # Create an array of length m and set all elements to 0
    rp = [0] * m
    rp[0] = 1

    for i in range(n-1):
        # The sum of all elements from 1 the end and dropping the final element
        rp = [sum(rp[1:])] + rp[:-1]

    return sum(rp)

解决方法

我认为Javascript只有一个“数字”数据类型,这实际上是一个IEEE双重引擎盖. 2,870,048,561,233,730,600太大而不能准确地保持在IEEE双,所以是近似的. (注意,尾随的“00” – 小数点后的十七进制位是右边的两个.)

另一方面,Python具有bignum支持,并且将非常高兴地处理4096位整数(对于使用加密算法的人来说,这是一个巨大的福音).

如果您搜索,您可能会找到一个Javascript bignum库 – 例如http://silentmatt.com/biginteger/

猜你在找的JavaScript相关文章