Heim >Backend-Entwicklung >C++ >Warum sind meine C# Floating-Punkt-Vergleiche ungenau?

Warum sind meine C# Floating-Punkt-Vergleiche ungenau?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-31 04:11:08985Durchsuche

Why Are My C# Floating-Point Comparisons Inaccurate?

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

. Das unerwartete

-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

sind so nahe, dass der Unterschied unter die Genauigkeit des

-Patentyps liegt, was zum falschen Vergleich führt.

Lösungen für eine verbesserte Genauigkeit:

    Um diese Ungenauigkeiten zu mildern, berücksichtigen Sie diese Ansätze:
  • decimal Verwenden Sie den decimal Datentyp:

    Der
  • -Typ bietet eine deutlich höhere Genauigkeit, wodurch er ideal für Finanzberechnungen und Situationen ist, in denen die genaue Dezimalvertretung erforderlich ist.
  • Epsilon-Vergleich:
  • Verwenden Sie anstelle eines direkten Vergleichs einen Toleranzwert (Epsilon), um zu überprüfen, ob die Differenz zwischen zwei Schwimmpunktzahlen innerhalb eines akzeptablen Bereichs liegt.
  • Verstehe Floating-Point-Arithmetik:
  • Machen Sie sich mit den Nuancen der schwimmenden Punktdarstellung und der Arithmetik vertraut. Ressourcen wie "Was jeder Informatiker über die Arithmetik des Gleitkomma-Arithmetiks wissen sollte" liefern wertvolle Einblicke in die Vermeidung gemeinsamer Fallstricke.

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!

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