我刚刚发现ECMAScript 7功能可以a**b
作为Math.pow(a,b)
(MDN参考)的替代产品,并且在该帖子中遇到了一个讨论,在这些讨论中它们的行为显然有所不同。我已经在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
7
听起来好像有人重写了他们使用的算法,但发现了浮点错误。数字很难...
—
krillgar
@krillgar听起来很合理,但是为什么在函数中没有发生相同的错误呢?
—
Thomas Altmann
两者之间的区别是:var x = 99; x * * x; 或函数diff(x){返回99 * * 99-(x * * x);和99 * * 99。}; 差异(99)。抱歉,间距
—
太小
@xszaboj将代码放入反引号中
—
phuclv
`likethis`
,以使其易于阅读,并避免了大胆/斜体的问题