c# In vielen Programmiersprachen wie C#wird die Anzahl der schwimmenden Punkte zur Darstellung der Dezimalzahl verwendet. Aufgrund der begrenzten Darstellung der schwimmenden Punktzahl im Computer haben diese Zahlen jedoch Genauigkeitsprobleme.
Betrachten Sie die folgenden Verfahren:
Dieses Programmausgabe hat falsch, was mit 0,09
<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); } }</code>
99,999999 zu sein scheint. Verstehen Sie das Problem der Genauigkeit
Der Grund für diese Genauigkeit ist die Art und Weise, wie die schwimmende Punktzahl im Speicher ausgedrückt wird. Diese digitale Speicherung ist eine Kombination aus Schwanznummer (Dezimaleil), Index (Leistung der Basis) und Symbole. Die Genauigkeit der Schwanznummer ist jedoch begrenzt.
In C#hat die einzelne Floating -Punktnummer (Float) 23 Ziffern und die Doppelprezision -Gleitkomma -Nummer (doppelt) eine 52 -Bit -Schwanznummer. Wenn die Endnummer nicht genau ausgedrückt werden kann, tritt sie in die vier Häuser ein und fünf bis die am nächsten an der Darstellung von Zahlen.im obigen Beispiel beträgt die Genauigkeit der 0,09
100 9.000000190734863, aber weil die Genauigkeit begrenzt ist, wird sie durch 32 -Bit -Float auf 9,0 dargestellt. In ähnlicher Weise sind 0,09 99,999999 vier Häuser und fünf in -Five 9,0. Infolgedessen sind diese beiden Werte relativ gleich und das Programm gibt false aus.
Um diese Genauigkeit zu verringern, führt der IEEE 754 Floating -Punkt -Operation Standard das Konzept von "Epsilon" ein, was bedeutet, dass er 1,0 hinzugefügt werden kann, ohne den minimalen Vorwärtsfloating -Punkt zu ändern. In C#beträgt dieser Wert ca. 1,4013E-45. Durch Vergleich der Differenz zwischen den beiden schwimmenden Punktzahlen mit dem Epsilon kann festgestellt werden, ob sie für ihre Gültigkeit im Genauigkeitsbereich des schwimmenden Punktes gültig sind.
Das obige ist der detaillierte Inhalt vonWarum führen schwimmende Punktvergleiche in C# manchmal unerwartete Ergebnisse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!