Maison >développement back-end >C++ >Pourquoi 0,1 n'est-il pas représenté exactement en arithmétique à virgule flottante, alors que 0,5 l'est ?
Précision en virgule flottante : pourquoi 0,5 est exact, mais 0,1 ne l'est pas
L'arithmétique à virgule flottante, bien qu'efficace pour de nombreux calculs, se heurte à des limites inhérentes à la représentation précise de tous les nombres décimaux. Cet article explique pourquoi 0,5 bénéficie d'une représentation exacte alors que 0,1 ne l'est pas.
Comprendre la représentation de 0,1
La norme IEEE 754 dicte la manière dont les nombres à virgule flottante sont stockés. Examinons la représentation de 0,1 :
<code>s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm 0 01111011 10011001100110011001101</code>
Multiplier la mantisse par 2-4 donne environ 0,100000001490116119384765625. Il s’agit d’une approximation proche de 0,1, mais pas d’une correspondance exacte. Les limitations inhérentes à la représentation binaire empêchent une conversion parfaite du nombre décimal 0,1.
La représentation précise de 0,5
En revanche, 0,5 a une représentation simple :
<code>s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm 0 01111110 00000000000000000000000</code>
Cela se traduit par 1 * 2-1 = 0,5, une représentation parfaite.
Conclusion : Les limites de la précision binaire
La différence réside dans la capacité du système binaire à représenter exactement certaines fractions décimales. Alors que 0,5 (1/2) est une puissance de deux et donc facilement représentée en binaire, 0,1 (1/10) ne l'est pas. Il en résulte une légère erreur d'arrondi lors du stockage de 0,1 au format virgule flottante, conduisant à l'approximation observée. Les programmeurs doivent être conscients de cette limitation inhérente lorsqu'ils travaillent avec des nombres à virgule flottante et des applications sensibles à la précision.
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!