Heim >Backend-Entwicklung >C++ >Wie soll ich Gleitkommazahlen auf Gleichheit und Ungleichheit vergleichen?
Bestimmen der Gleichheit von Gleitkommazahlen mithilfe von Double.Epsilon
In der MSDN-Dokumentation wird empfohlen, zur Feststellung einen Wert zu verwenden, der größer als die Double.Epsilon-Konstante ist die akzeptable absolute Differenzspanne bei der Bestimmung, ob zwei Gleitkommazahlen als gleich angesehen werden können. Diese Empfehlung sorgt jedoch für einige Verwirrung.
Hat Double.Epsilon einen praktischen Nutzen in Vergleichen?
Der MSDN-Wortlaut hat zu Missverständnissen über den praktischen Nutzen von Double geführt. Epsilon. Wie in der bereitgestellten Antwort angegeben, stellt Double.Epsilon den kleinsten darstellbaren nicht denormalen Gleitkommawert dar, der nicht 0 ist. Es gibt lediglich die Mindestgröße eines Kürzungsfehlers an, keinen akzeptablen Spielraum für einen Vergleich.
Berechnung eines geeigneten Epsilons für Gleichheitsvergleiche
Für Gleichheitsvergleiche besteht ein praktischerer Ansatz darin, ein Epsilon basierend auf zu verwenden die Größe der verglichenen Werte. Zum Beispiel:
public static bool AboutEqual(double x, double y) { double epsilon = Math.Max(Math.Abs(x), Math.Abs(y)) * 1E-15; return Math.Abs(x - y) <= epsilon; }
Diese Methode verwendet den größeren der Absolutwerte der beiden Zahlen multipliziert mit einer kleinen Konstante (1E-15), um den akzeptablen Spielraum für den Vergleich zu bestimmen.
Berücksichtigung von Größer-als- und Kleiner-als-Vergleichen
Für Vergleiche wie größer als oder kleiner als gilt das gleiche Prinzip. Das Epsilon sollte basierend auf der Größe der verglichenen Zahlen berechnet werden, um potenzielle Kürzungsfehler zu berücksichtigen.
Beste Implementierung für Gleichheits- und Ungleichheitsvergleiche
Zusammenfassend: Double .Epsilon kann nicht direkt als akzeptabler Spielraum für Gleichheits-, Größer-, Kleiner-, Kleiner-gleich- oder Größer-gleich-Vergleiche für Gleitkommazahlen verwendet werden. Stattdessen sollte ein kontextspezifisches Epsilon berechnet werden, um genaue Vergleiche zu gewährleisten.
Das obige ist der detaillierte Inhalt vonWie soll ich Gleitkommazahlen auf Gleichheit und Ungleichheit vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!