C # Arithmétique à virgule flottante: Pourquoi la précision compte
Les nombres à virgule flottante en C #, bien que couramment utilisés, ont des limitations inhérentes qui peuvent produire des résultats inattendus. Examinons un cas illustrant cette imprécision.
Considérons 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 outputs "false" } }</code>
Le programme produit étonnamment "Faux", même si f1
(0,09 100) devrait logiquement être plus grand que f2
(0,09 99.999999). Cela est dû aux limites inhérentes de la représentation des points flottants.
Les types de points flottants, comme float
(32 bits en C #), ont une précision limitée. Ils ne peuvent représenter avec précision qu'un nombre fini de chiffres décimaux (environ 7 pour float
). Les calculs impliquant des nombres à virgule flottante introduisent des erreurs d'arrondi, qui s'accumulent et peuvent entraîner des écarts comme celui observé. Dans ce cas, les erreurs d'arrondi pendant le calcul et le stockage de f1
et f2
les font être considérés comme égaux, ou même pour que f1
soit légèrement plus petit que f2
en raison de ces erreurs accumulées.
Pour une compréhension complète de la précision du point flottante et de ses implications, consultez la ressource définitive: "Ce que chaque informaticien doit savoir sur l'arithmétique à 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!