- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我正在尝试编写一个程序来列出网络上所有设备的 IP 地址。其主要组成部分之一是能够 ping 设备。这个程序必须在 Linux、Windows 和 Mac 上运行,所以我选择了 Boost 库。 我设
如果我使用 Google 的 Jquery 加载脚本链接,那么如果用户的缓存中已经有该文件,那么当页面加载时,用户计算机是否仍会以任何方式与 Google 联系? 例子: 最佳答案 根据浏览器的缓存
我想在我的 ruby 代码中 ping 一个站点,发现 net-ping 是一个很好的库来执行此操作。不幸的是,当我尝试 gem install net-ping 时出现以下错误: C:>gem
我有一个表(test_matches),其中记录了几场比赛的结果,按日期排序。 GHFT = 目标主队全职。GAFT = 全职客场进球队。 CREATE TABLE `test_matches` (
我正在使用 phing对于一个项目的一些自动构建过程,我想知道:我怎样才能通过电子邮件获得完整的日志? 当我通过命令行启动 phing 时,会显示构建日志;我想要它: 通过电子邮件发送, 给几个收件人
尝试根据 GF 和 GA 创建一个新列“Results”。想知道如何通过定义函数和条件语句来做到这一点。以下是我对一行的初步尝试,但无法弄清楚如何将其应用于所有行,非常感谢您的帮助! 日期地点对手GF
我是一名优秀的程序员,十分优秀!