Maison > Article > interface Web > Analyser 0,1 + 0,2 != 0,3 en js
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<.>
Précision de la machinedel = 2^-52
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
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!