Heim > Backend-Entwicklung > C++ > Warum sind Floating-Punkt-Berechnungen in C# ungenau?

Warum sind Floating-Punkt-Berechnungen in C# ungenau?

Mary-Kate Olsen
Freigeben: 2025-01-31 04:18:08
Original
680 Leute haben es durchsucht

Why Are Floating-Point Calculations in C# Imprecise?

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>
Nach dem Login kopieren
Die Ausgabe "Falsch" ist kontraintuitiv, da beide Berechnungen 9,0 zu ergeben scheinen. Diese Diskrepanz ergibt sich aus den Grenzen der schwimmenden Punktdarstellung.

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

ist daher unzuverlässig, die Gleitkomma-Zahlen für Gleichheit (

) 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>
Nach dem Login kopieren
Dieser Ansatz überprüft, ob der absolute Unterschied zwischen

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

Alternativ bietet die Verwendung von

(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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage