Maison >développement back-end >C++ >Pourquoi mes comparaisons C # Floating Point sont-elles inexactes?

Pourquoi mes comparaisons C # Floating Point sont-elles inexactes?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-31 04:11:08927parcourir

Why Are My C# Floating-Point Comparisons Inaccurate?

Compréhension des inexactitudes en C # Arithmétique à virgule flottante

La précision

est primordiale dans de nombreuses tâches de programmation. Cependant, les nombres à virgule flottante de C # (flotteurs et doubles) peuvent produire des résultats apparemment inexacts en raison de leurs limites inhérentes. Explorons pourquoi.

Considérons cet extrait de code C #:

<code class="language-csharp">float f1 = 0.09f * 100f;
float f2 = 0.09f * 99.999999f;

Console.WriteLine(f1 > f2); // Outputs: False</code>

Logiquement, f1 devrait être supérieur à f2. Le résultat False inattendu découle de la façon dont les nombres à virgule flottante sont stockés dans les ordinateurs.

Les nombres à virgule flottante utilisent un nombre fini de bits pour approximer les nombres réels. Les doubles, par exemple, ont 52 bits de précision pour la mantissa. Le problème est que de nombreux nombres décimaux, comme 0,09, ne peuvent pas être représentés avec précision à l'aide d'une représentation binaire finie. Ils sont stockés sous forme d'approximations.

Les opérations de multiplication dans l'exemple introduisent des erreurs d'arrondi. Les approximations de f1 et f2 deviennent si proches que la différence tombe en dessous de la précision du type de données float, conduisant à la comparaison incorrecte.

Solutions pour une précision améliorée:

Pour atténuer ces inexactitudes, considérez ces approches:

  • Utilisez le type de données decimal: Le type decimal offre une précision nettement plus élevée, ce qui le rend idéal pour les calculs financiers et les situations exigeant une représentation décimale exacte.

  • Comparaison d'Epsilon: Au lieu d'une comparaison directe, utilisez une valeur de tolérance (epsilon) pour vérifier si la différence entre deux nombres à virgule flottante se situe dans une plage acceptable.

  • Comprendre l'arithmétique à virgule flottante: Familiarisez-vous avec les nuances de la représentation du point flottante et de l'arithmétique. Des ressources comme «ce que chaque informaticien doit savoir sur l'arithmétique à virgule flottante» fournit des informations précieuses pour éviter les pièges courants.

En comprenant ces limitations et en utilisant des techniques appropriées, vous pouvez vous assurer des résultats plus précis dans vos programmes C # impliquant des calculs à 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!

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