当前位置:  开发笔记 > 编程语言 > 正文

Javascript在Python中给出了相同算法的不同答案

如何解决《Javascript在Python中给出了相同算法的不同答案》经验,为你挑选了2个好方法。

我正在研究Rosalind问题Mortal Fibonacci Rabbits,当我使用我的算法编写JavaScript时,网站一直告诉我我的答案是错误的.当我在Python中使用相同的算法时,我会得到一个不同的(和正确的)答案.

只有在结果变大时才会出现不一致.例如,在JavaScript中fibd(90, 19)返回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, 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)

Martin Bonne.. 13

我认为Javascript只有一个"数字"数据类型,这实际上是一个IEEE双引擎.2,870,048,561,233,730,600太大而无法精确地保持IEEE双倍,因此它是近似的.(请注意尾随"00" - 小数点后17位左右.)

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

威力如果你搜索,将能够找到一个Javascript bignum库 - 例如http://silentmatt.com/biginteger/



1> Martin Bonne..:

我认为Javascript只有一个"数字"数据类型,这实际上是一个IEEE双引擎.2,870,048,561,233,730,600太大而无法精确地保持IEEE双倍,因此它是近似的.(请注意尾随"00" - 小数点后17位左右.)

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

威力如果你搜索,将能够找到一个Javascript bignum库 - 例如http://silentmatt.com/biginteger/



2> Simone Zanda..:

只是做了一些研究,这篇文章似乎很有趣.Javascript仅支持53位整数.

Python给出的结果确实超出了JS的最大安全范围.如果你试图这样做

parseInt('2870048561233731259')

它确实会回归

2870048561233731000

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有