Heim >Backend-Entwicklung >C++ >Warum scheinbar 0,09F * 100f 0,09F * 99,999999f in C#nicht überschreitet?
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
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!