Maison >développement back-end >C++ >Pourquoi les calculs de points flottants en C # sont-ils imprécis?
Comprendre l'imprécision à virgule flottante dans C #
L'imprécision inhérente de l'arithmétique à virgule flottante conduit souvent à des résultats inattendus. Considérez cet extrait de code C #:
<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); // Surprisingly prints "false" } }</code>
La sortie, "False", est contre-intuitive, car les deux calculs semblent produire 9.0. Cet écart découle des limites de la représentation des points flottants.
IEEE 754 Les nombres à virgule flottante standard utilisent un nombre fini de bits pour représenter des pièces fractionnées. Cela signifie que de nombreuses valeurs décimales ne peuvent pas être stockées précisément; Ils sont approximés. Les valeurs 0.09f
et les résultats des calculs sont des approximations. Ces approximations, bien que souvent insignifiantes, peuvent provoquer des comparaisons inattendues.
Par conséquent, la comparaison directement des nombres à virgule flottante pour l'égalité (==
) n'est pas fiable. Au lieu de cela, utilisez une comparaison basée sur la tolérance:
<code class="language-csharp">Console.WriteLine(Math.Abs(f1 - f2) < 0.0001); // A more robust comparison</code>
Cette approche vérifie si la différence absolue entre f1
et f2
est inférieure à un seuil prédéfini (0,0001 dans ce cas). Ajustez le seuil en fonction de la précision requise de votre application.
Alternativement, en utilisant double
(nombres à virgule flottante à double précision) offre une précision plus élevée que float
(précision unique), réduisant la probabilité de ces inexactitudes. Cependant, même les valeurs double
sont soumises à des limitations similaires, mais avec une marge d'erreur plus petite. Un examen attentif des exigences de précision est essentiel pour des calculs fiables à point flottante.
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!