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 ?

Pourquoi 0,1 n'est-il pas représenté exactement en arithmétique à virgule flottante, alors que 0,5 l'est ?

Mary-Kate Olsen
Libérer: 2025-01-15 07:49:13
original
139 Les gens l'ont consulté

Why is 0.1 not represented exactly in floating-point arithmetic, while 0.5 is?

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>
Copier après la connexion
  • Signe(s) :0 (positif).
  • Exposant (eeeee) : 123. En soustrayant le biais (127), on obtient un exposant effectif de -4.
  • Mantisse (mmmmmmmmmmmmmmmmmmmmmm): Interprétée comme une fraction binaire avec un "1" implicite en tête. La somme des bits de mantisse donne environ 1,60000002384185791015625.

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>
Copier après la connexion
  • Signe(s) :0 (positif).
  • Exposant (eeeee) : 126. L'exposant effectif (après ajustement du biais) est -1.
  • Mantisse (mmmmmmmmmmmmmmmmmmmmmm): 0.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal