Heim >Backend-Entwicklung >C++ >Warum sind meine C# Floating-Punkt-Vergleiche ungenau?
Ungenauigkeiten im C# -Slebreten-Punkt-Arithmetik
verstehen
Genauigkeit ist in vielen Programmieraufgaben von größter Bedeutung. Die Gleitkomma-Zahlen von C#können jedoch aufgrund ihrer inhärenten Einschränkungen scheinbar ungenaue Ergebnisse erzielen. Lassen Sie uns untersuchen, warum.
<code class="language-csharp">float f1 = 0.09f * 100f; float f2 = 0.09f * 99.999999f; Console.WriteLine(f1 > f2); // Outputs: False</code>Betrachten Sie diesen C# Code -Snippet:
f1
f2
logischerweise sollte False
größer sein als
-Strieb ergibt sich aus der Art und Weise, wie schwimmende Punktzahlen in Computern gespeichert sind.
Floating-Punkt-Nummern verwenden eine begrenzte Anzahl von Bits, um die realen Zahlen zu approximieren. Doppel zum Beispiel haben 52 Präzisionsbits für die Mantissa. Das Problem ist, dass viele Dezimalzahlen wie 0,09 nicht mit einer endlichen binären Darstellung genau dargestellt werden können. Sie werden als Annäherungen gespeichert. f1
f2
Die Multiplikationsvorgänge im Beispiel führen Rundungsfehler ein. Die Annäherungen an float
und
-Patentyps liegt, was zum falschen Vergleich führt.
Lösungen für eine verbesserte Genauigkeit:
decimal
Verwenden Sie den decimal
Datentyp:
Epsilon-Vergleich:
Verstehe Floating-Point-Arithmetik:
Wenn Sie diese Einschränkungen verstehen und geeignete Techniken anwenden, können Sie in Ihren C# -Programmen mit Floating-Punkt-Berechnungen genauere Ergebnisse sicherstellen.
Das obige ist der detaillierte Inhalt vonWarum sind meine C# Floating-Punkt-Vergleiche ungenau?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!