【发布时间】:2017-05-31 10:58:02
【问题描述】:
我刚刚发现了 ECMAScript 7 功能 a**b 作为 Math.pow(a,b) (MDN Reference) 的替代品,并在 that post 中进行了讨论,其中它们的行为显然不同。我已经在 Chrome 55 中对其进行了测试,并且可以确认结果有所不同。
Math.pow(99,99) 返回3.697296376497263e+197
而
99**99 返回3.697296376497268e+197
因此记录差异 Math.pow(99,99) - 99**99 会导致 -5.311379928167671e+182。
到目前为止,可以说它只是另一种实现,但将其包装在函数中的行为又有所不同:
function diff(x) {
return Math.pow(x,x) - x**x;
}
调用diff(99) 返回0。
为什么会这样?
正如xszaboj 所指出的,这可以缩小到这个问题:
var x = 99;
x**x - 99**99; // Returns -5.311379928167671e+182
【问题讨论】:
-
听起来好像有人重写了他们使用的算法,发现了一个floating point error。数字很难......
-
@krillgar 听起来很合理,但为什么函数中没有发生同样的错误呢?
-
@AndersonPimentel MDN 链接指向compatibility table。
-
这两者之间的区别是:var x = 99; x * * x ;和 99 * * 99。或 function diff(x) { return 99 * * 99 - (x * * x); };差异(99)。对不起,评论过滤了两颗星:(
-
@xszaboj 将代码放入反引号
`likethis`以使其可读并避免粗体/斜体问题
标签: javascript google-chrome v8 ecmascript-2016