【发布时间】:2020-07-16 09:48:53
【问题描述】:
当我运行下面的简单计算时,Chrome 和 Firefox 上的结果略有不同。
铬:56.1124478168614
火狐:56.11244781686139
let x = -24.42;
let y = -50.519999999999925;
console.log(Math.hypot(x, y));
Math.hypot() 的规范中是否存在漏洞,或者是其中一个浏览器以错误的方式实现它?
编辑:在 Firefox 中,Math.hypot(x, y) 的结果与 Math.sqrt(x*x, y*y) 相同,在 Chrome 中,Math.hypot(x, y) 的结果略有不同。因此我怀疑 Firefox 的计算是正确的。
【问题讨论】:
-
不是骗子,而是related。实际上结果是一样的,只是 Chrome 似乎将小数限制为 13 位。
-
@Teemu 我知道浮点精度,但您肯定会期望 2020 年不同浏览器上的 Javascript 数学得到相同的结果。
-
为什么您会期望相同非平凡计算的两种不同实现产生相同的舍入误差? (不管是哪一年,或者是哪种语言的实现!)
-
specs 说:“Math.hypot 返回一个依赖于实现的近似值 ...”。
-
@jmrk 因为我希望清楚地指定舍入行为(并且它与 Javascript 的其他部分一起使用)。但正如 Teemu 指出的那样,在这种情况下,规范特别提到了一个依赖于实现的近似值,它解释了不同的行为。
标签: javascript google-chrome firefox v8 hypotenuse