代码之家  ›  专栏  ›  技术社区  ›  ChrisW

Math.pow会在所有Node.js平台上给出相同的结果吗?

  •  0
  • ChrisW  · 技术社区  · 6 年前

    意志 Math.pow 在所有Node.js平台上返回相同的结果(对于相同的输入)?

    我猜JavaScript算术结果总是相同的(即确定性的,尽管不精确),因为 that's defined by the IEEE 754 .

    相反,我猜 Math 函数结果不一定是,尤其是。 pow 其中(理论上)不同的平台在实现中可能有不同的成本/精度权衡。

    如果我把问题限制在“所有”上怎么办 结果 关于Node.js “--例如,是 数学

    1 回复  |  直到 6 年前
        1
  •  2
  •   Community CDub    4 年前

    不幸的是,跨平台浮点算法是一个难题。这是不确定的 即使

    这里有一篇有用的文章: https://gafferongames.com/post/floating_point_determinism/

    如果您使用由相同编译器构建的可执行文件,在具有相同体系结构的计算机上运行,并执行某些特定于平台的技巧,则可以跨多台计算机获得浮点计算的确定性结果。

    在C或C++中编写任意浮点代码是非常天真的,并期望它在不同编译器或体系结构上给出完全相同的结果,甚至在调试和发布构建中也能得到相同的结果。

    因此,如果在相同的机器上有相同的二进制代码,并且代码本身是确定性的(你怎么知道呢?NodeJS在幕后做了很多事情),那么你的浮点算法也很有可能是确定性的。但你能保证吗?现在和将来?这不是很难吗?

    另一种方法是使用一些十进制库(例如。 https://github.com/MikeMcl/decimal.js/ )。请注意,它会牺牲性能以获得正确性。如果性能不是绝对关键的话,我建议您继续这样做(当然也不应该如此,毕竟您使用的是JS)。