(MDNリファレンス)のa**b
代替としてECMAScript 7機能を発見しました。その投稿で、動作が明らかに異なるという議論に遭遇しました。Chrome 55でテストしましたが、結果が異なることが確認できました。Math.pow(a,b)
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
`likethis`
に入れて読みやすくし、太字/斜体の問題も回避しています