Maison >développement back-end >C++ >Pourquoi mes comparaisons C # Floating Point sont-elles inexactes?
Compréhension des inexactitudes en C # Arithmétique à virgule flottante
La précisionest 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!