Heim >Backend-Entwicklung >C++ >Warum scheinbar 0,09F * 100f 0,09F * 99,999999f in C#nicht überschreitet?

Warum scheinbar 0,09F * 100f 0,09F * 99,999999f in C#nicht überschreitet?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-31 04:21:11519Durchsuche

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

c# Floating-Punkt-Arithmetik: Warum Präzision zählt

Floating-Punkt-Zahlen in C#haben zwar üblicherweise inhärente Einschränkungen, die unerwartete Ergebnisse erzielen können. Lassen Sie uns einen Fall untersuchen, der diese Ungenauigkeit veranschaulicht.

Betrachten Sie diesen C# Code -Snippet:

<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>

Das Programm gibt überraschend "false" aus, obwohl f1 (0,09 100) logisch größer als f2 (0,09 99,999999) sein sollte. Dies ist auf die inhärenten Einschränkungen der schwimmenden Punktdarstellung zurückzuführen.

Floating-Punkt-Typen wie float (32 Bit in C#) haben eine begrenzte Präzision. Sie können nur eine endliche Anzahl von Dezimalstellen genau darstellen (ungefähr 7 für float). Berechnungen mit Gleitkomma-Zahlen führen zu Rundungsfehlern, die sich akkumulieren und zu Diskrepanzen wie dem beobachteten führen können. In diesem Fall lassen die Rundungsfehler während der Berechnung und Speicherung von f1 und f2 aufgrund dieser akkumulierten Fehler die gleiche als gleiche oder sogar für f1 als f2 als

als

angesehen.

Für ein umfassendes Verständnis der Präzision des Gleitpunkts und deren Auswirkungen wenden Sie sich an die endgültige Ressource: "Was jeder Informatiker über die Arithmetik des Floating-Punktes wissen sollte."

Das obige ist der detaillierte Inhalt vonWarum scheinbar 0,09F * 100f 0,09F * 99,999999f in C#nicht überschreitet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn