Maison  >  Article  >  interface Web  >  Analyser 0,1 + 0,2 != 0,3 en js

Analyser 0,1 + 0,2 != 0,3 en js

小云云
小云云original
2018-02-23 10:27:502178parcourir

Les nombres stockés en Javascript utilisent IEEE754. Les nombres à virgule flottante double précision 64 bits

sont stockés dans l'ordinateur au format
1 11 52
1 64 bits : bit de signe 0 Nombre positif 1 nombre négatif
11 : Le chiffre de l'exposant est utilisé pour déterminer la plage
52 : Le chiffre de la mantisse est utilisé pour déterminer la précision
La représentation décimale convertie est

num = (-1)^s * (1.f) * 2^E
E = e - 1023
s:符号位
e:指数位
f:尾数位
1023偏正值 使得指数位真实取值为[-1023, 1024] 而非 [0, 2047] 目的是为了方便比较大小
实际指数值 = 阶码 - 偏正值
阶码 = 指数的移码 - 1
移码与补码符号为互为取反
举例:
如果指数位实际值为-1
原码:100 0000 0001
反码:111 1111 1110
补码:111 1111 1111
移码:011 1111 1111
阶码:011 1111 1110 = 1022
也可以通过
阶码 = 指数 + 偏正值 = -1 + 1023 = 1022 = 011 1111 1110来计算得到

Le chiffre de l'exposant est entièrement 0 et tous 1 a une signification particulière, qui sera discutée plus tard. Il est utilisé pour représenter +-0 et +-∞

valeurs spéciales<.>

Analyser 0,1 + 0,2 != 0,3 en js

Précision de la machinedel = 2^-52

Ensuite, expliquez pourquoi 0,1 + 0,2 = 0,30000000000000004

Tout d'abord, dans les langages utilisant la norme IEEE754 On calcule le binaire de 0,1
0,1 * 2 = 0
0,2 * 2 = 0
0,4 * 2 = 0
0,8 * 2 = 1
0,6 * 2 = 1
0,2 * 2 = 0
0,4 * 2 = 0
0,8 * 2 = 1
0,6 * 2 = 1
0,2 * 2 = 0
....
donc 0,1 en binaire Pour 0.0001100110011001100... boucle,
peut être converti en 2^-4 * 1.100110011001100...
Puisque les chiffres réservés sont de 52 bits au total, à l'exclusion du bit entier le plus à gauche 1,
est finalement stocké dans l'ordinateur La valeur est : 2^-4 * 1,100 11001100 11001100 11001100 11001100 11001100 11001100 1

De même 0,2

0,2 * 2 = 0
0,4 * 2 = 0
0,8 * 2 = 1
0,6 * 2 = 1
0,2 * 2 = 0
0,4 * 2 = 0
0,8 * 2 = 1
0,6 * 2 = 1
...
Donc le binaire de 0,2 est 0,001100110011001100...boucle,
peut être converti en 2^-3 * 1,100110011001100...
Le plus simple la valeur à stocker finalement dans l'ordinateur est : 2^-3 * 1.100 11001100 11001100 11001100 11 001100 11001100 11001100 1
Ajoutez les deux
0.0001100 11001100 11001100 11 001100 11001100 11001100 11001100 1
+
0.001100 11001100 1 1001100 11001100 11001100 11001100 11001100 1
= 0.0 10011001 10011001 10011001 10011001 10011001 10011001 10011
≈ 0,30000000000000004



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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