Maison > développement back-end > C++ > Pourquoi 0,09f * 100f ne dépasse-t-il pas 0,09f * 99.999999f en C #?

Pourquoi 0,09f * 100f ne dépasse-t-il pas 0,09f * 99.999999f en C #?

Mary-Kate Olsen
Libérer: 2025-01-31 04:21:11
original
512 Les gens l'ont consulté

Why Does 0.09f * 100f Seemingly Not Exceed 0.09f * 99.999999f in C#?

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal