Maison  >  Article  >  interface Web  >  Introduction aux plages numériques dans les astuces JavaScript_javascript

Introduction aux plages numériques dans les astuces JavaScript_javascript

WBOY
WBOYoriginal
2016-05-16 16:23:391492parcourir

Tous les nombres en JavaScript, qu'ils soient entiers ou décimaux, sont de type Nombre. Dans le programme, le type Number est essentiellement un nombre à virgule flottante de 64 bits, ce qui est cohérent avec le nombre à virgule flottante de type double en Java. Par conséquent, tous les nombres en JavaScript sont des nombres à virgule flottante. Conformément à la norme IEEE 754 (norme arithmétique à virgule flottante), la plage numérique que JavaScript peut représenter est de plus ou moins 1,7976931348623157 fois 10 à la puissance 308, et la plus petite décimale pouvant être représentée est de plus ou moins 5 fois 10 à la puissance. de moins 324. Ces deux valeurs limites peuvent être obtenues en accédant respectivement à l'attribut MAX_VALUE et à l'attribut MIN_VALUE de l'objet Number.

Pour les entiers, selon les exigences de la norme ECMAScript (http://ecma262-5.com/ELS5_HTML.htm#Section_8.5), la plage d'entiers que JavaScript peut représenter et exécuter les opérations arithmétiques précises sont : Plus ou moins 2 élevé à la puissance 53, c'est-à-dire la plage allant de la valeur minimale -9007199254740992 à la valeur maximale 9007199254740992 pour les entiers dépassant cette plage, JavaScript peut toujours effectuer des opérations, mais il ne garantit pas la valeur ; précision des résultats de l'opération. Il convient de noter que pour les opérations sur bits entiers (telles que les décalages et autres opérations), JavaScript ne prend en charge que les entiers de 32 bits, c'est-à-dire les entiers compris entre -2147483648 et 2147483647.

Expérimenter

Afficher la valeur absolue du plus grand nombre et la valeur absolue de la plus petite décimale en JavaScript :

Copier le code Le code est le suivant :

console.log(Numéro.MAX_VALUE);
console.log(Nombre.MIN_VALUE);

Les résultats affichés sont 1.7976931348623157e 308 et 5e-324.

Pour les entiers en dehors de la plage de plus ou moins 2 élevés à la puissance 53, JavaScript ne peut pas donner des résultats de calcul précis :

Copier le code Le code est le suivant :

var a = 9007199254740992;
console.log(a 3);


Le résultat du calcul correct doit être 9007199254740995, mais le résultat du calcul donné par JavaScript est 9007199254740996. Après avoir essayé de modifier la formule de calcul, vous constaterez que tant que l'entier est supérieur à 9007199254740992, des erreurs dans ce résultat de calcul se produiront fréquemment. Si l'écart dans la précision du calcul est acceptable, alors les conséquences de l'exemple suivant sont encore plus graves :


Copier le code Le code est le suivant :

var MAX_INT = 9007199254740992;
pour (var i = MAX_INT; i < MAX_INT 2; i) {
// boucle infinie
>


En raison de problèmes de précision des calculs, l'instruction for ci-dessus tombera dans une boucle infinie.

Pour les opérations au niveau du bit, JavaScript ne prend en charge que les entiers 32 bits :


Copier le code Le code est le suivant :

var petitInt = 256;
var bigInt = 2200000000;
console.log(smallInt / 2);
console.log(smallInt >> 1);
console.log(bigInt/2);
console.log(bigInt >> 1);


On peut voir que pour les entiers compris entre 32 bits (256), JavaScript peut effectuer des opérations binaires correctes et le résultat est cohérent avec le résultat de l'opération de division (128). Pour les entiers autres que 32 bits, JavaScript peut effectuer des opérations de division correctes (1100000000), mais le résultat obtenu après avoir effectué des opérations sur bits est loin d'être le résultat correct (-1047483648).

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn