Je viens de découvrir la fonctionnalité d'ECMAScript 7 a**b
comme alternative à Math.pow(a,b)
( Référence MDN ) et je suis tombé sur une discussion dans ce poste dans lequel ils se comportent apparemment différemment. Je l'ai testé dans Chrome 55 et je peux confirmer que les résultats sont différents.
Math.pow(99,99)
renvoie à 3.697296376497263e+197
alors que
99**99
renvoie à 3.697296376497268e+197
Donc, l'enregistrement de la différence Math.pow(99,99) - 99**99
résulte en -5.311379928167671e+182
.
Jusqu'à présent, on pourrait dire qu'il s'agit simplement d'une autre implémentation, mais l'envelopper dans une fonction a un comportement différent :
function diff(x) {
return Math.pow(x,x) - x**x;
}
en appelant diff(99)
renvoie à 0
.
Pourquoi cela se produit-il ?
Comme xszaboj Comme nous l'avons souligné, le problème peut être réduit à ceci :
var x = 99;
x**x - 99**99; // Returns -5.311379928167671e+182