gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:32:59 24 4
gpt4 key购买 nike

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

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

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

如果我将问题限制为“Node.js 上的所有 Math.pow 结果”,会怎样? Math 库在所有 Node.js 平台实现上都足够相似吗?

最佳答案

所以我要谈谈一般的浮点运算。由于 Pow 只是一个子集,因此也适用于它。

不幸的是,跨平台浮点运算很痛苦。即使在实现相同的假设下,它也不是确定性的。问题之一是,虽然浮点运算是标准化的,但 float 的转换却不是(这发生在 NodeJS 的最低级别,我不把它算作 NodeJS 实现的一部分,因为它来自标准 C 库)。

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

It is possible to get deterministic results for floating calculations across multiple computers provided you use an executable built with the same compiler, run on machines with the same architecture, and perform some platform-specific tricks.

It is incredibly naive to write arbitrary floating point code in C or C++ and expect it to give exactly the same result across different compilers or architectures, or even the same results across debug and release builds.

在您的例子中,文本引用的应用程序是 NodeJS 二进制文件本身。请注意,相同版本的 NodeJS 比相同的二进制文件要弱。这还不够。

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

另一种方法是使用一些十进制库(例如 https://github.com/MikeMcl/decimal.js/ )。请注意,它会牺牲性能来换取正确性。如果性能不是绝对重要的话,我建议走这条路(而且不应该如此,毕竟你使用的是 JS)。

关于javascript - Math.pow 在所有 Node.js 平台上都会给出相同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53782528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com