Maison >développement back-end >C++ >Pourquoi les comparaisons de points flottants en C # donnent-elles parfois des résultats inattendus?
c # Dans de nombreux langages de programmation tels que C #, le nombre de points flottants est utilisé pour représenter décimal. Cependant, en raison de la représentation limitée du nombre de points flottants dans l'ordinateur, ces chiffres ont des problèmes de précision.
Considérez les procédures suivantes:
Ce programme sortira faux, ce qui semble contradictoire avec 0,09
<code class="language-csharp">class Program { static void Main(string[] args) { float f1 = 0.09f * 100f; float f2 = 0.09f * 99.999999f; Console.WriteLine(f1 > f2); } }</code>100 supérieur à 0,09
99,999999. Comprendre le problème de la précision
La raison de cette précision est la façon dont le numéro de point flottant est exprimé en mémoire. Ce stockage numérique est une combinaison du numéro de queue (partie décimale), de l'index (puissance de la base) et des symboles. Cependant, la précision du numéro de queue est limitée.
En C #, le numéro de point flottant à provision unique (Float) a 23 chiffres, et le numéro de point flottant à double précision (double) a un numéro de queue à 52 bits. Lorsque le numéro de fin ne peut pas être exprimé avec précision, il entre dans les quatre maisons et cinq au plus proche pour représenter les nombres.Dans l'exemple ci-dessus, la précision du 0,09
100 est 9.000000190734863, mais parce que la précision est limitée, il est représenté par un flotteur à 32 bits à 9,0. De même, 0,09 99.999999 Quatre maisons et cinq en-cinq sont 9,0. En conséquence, ces deux valeurs sont relativement égales et le programme sort faux.
Afin de réduire cette précision, la norme de fonctionnement flottante IEEE 754 introduit le concept d'Epsilon, ce qui signifie qu'il peut être ajouté à 1.0 sans modifier son point de fonctionnement avant minimum. En C #, cette valeur est d'environ 1,4013e-45. En comparant la différence entre les deux nombres de points flottants avec l'Epsilon, il peut être déterminé s'ils sont valides pour leur validité dans la plage de précision du point flottant.
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!