Verständnis der Uneinheit der schwebenden Punkte in C#
Die inhärente Ungenauigkeit der Floating-Punkt-Arithmetik führt häufig zu unerwarteten Ergebnissen. 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 prints "false" } }</code>
IEEE 754 Standard-Floating-Punkt-Nummern Verwenden Sie eine endliche Anzahl von Bits, um Bruchteile darzustellen. Dies bedeutet, dass viele Dezimalwerte nicht genau gespeichert werden können; Sie werden angenähert. Die Werte
und die Ergebnisse der Berechnungen sind Annäherungen. Diese Näherungen können zwar oft unbedeutend, aber unerwartete Vergleiche verursachen. 0.09f
) direkt zu vergleichen. Verwenden Sie stattdessen einen toleranzbasierten Vergleich: ==
<code class="language-csharp">Console.WriteLine(Math.Abs(f1 - f2) < 0.0001); // A more robust comparison</code>
und f1
unter einem vordefinierten Schwellenwert liegt (in diesem Fall 0,0001). Passen Sie den Schwellenwert anhand der erforderlichen Präzision Ihrer Anwendung an. f2
(doppelte Präzisions-Gleitpunktzahlen) eine höhere Genauigkeit als double
(Einzelprezision), wodurch die Wahrscheinlichkeit dieser Ungenauigkeiten verringert wird. Selbst float
Werte unterliegen jedoch ähnlichen Einschränkungen, wenn auch mit einer geringeren Fehlerquote. Die sorgfältige Berücksichtigung der Präzisionsanforderungen ist für zuverlässige Gleitkomma-Berechnungen von wesentlicher Bedeutung. double
Das obige ist der detaillierte Inhalt vonWarum sind Floating-Punkt-Berechnungen in C# ungenau?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!