Heim >Backend-Entwicklung >Golang >Wie kann ich Gleitkommazahlen in Go genau auf Gleichheit vergleichen?

Wie kann ich Gleitkommazahlen in Go genau auf Gleichheit vergleichen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-09 19:14:11405Durchsuche

How Can I Accurately Compare Floating-Point Numbers for Equality in Go?

Los: Eine intelligentere Möglichkeit, Floats zu vergleichen

Wenn Sie sich mit der Komplexität von IEEE 754 und binären Float-Darstellungen befassen, stoßen Sie möglicherweise auf a offene Frage: Wie vergleicht man zwei Floats in Go genau auf Gleichheit? Ein möglicher Ansatz besteht darin, die Unterschiede auf Bitebene mit einer Lösung wie dieser zu untersuchen:

func Equal(a, b float64) bool {
    ba := math.Float64bits(a)
    bb := math.Float64bits(b)
    diff := ba - bb
    if diff < 0 {
        diff = -diff
    }
    return diff < 2
}

Diese Methode zielt darauf ab, einen einzelnen Bitunterschied zu berücksichtigen und diesen als „fast gleich“ zu betrachten. Dieser Ansatz weist jedoch Einschränkungen auf.

Ein effektiverer Ansatz

Anstatt sich auf die Bitmanipulation zu verlassen, besteht eine zuverlässigere Lösung darin, die beiden Zahlen direkt zu subtrahieren und zu überprüfen absolute Differenz gegenüber einem vordefinierten Schwellenwert. Dieser Ansatz ist intuitiver und genauer:

const float64EqualityThreshold = 1e-9

func almostEqual(a, b float64) bool {
    return math.Abs(a - b) <= float64EqualityThreshold
}

Warum er überlegen ist

Diese Methode vermeidet die Fallstricke der Bitdarstellung, die in bestimmten Situationen zu ungenauen Vergleichen führen kann . Durch den direkten Vergleich der numerischen Differenz erzielen Sie eine höhere Präzision und Genauigkeit. Darüber hinaus entfällt die Notwendigkeit, Bitunterschiede manuell zu überprüfen, wodurch der Code prägnanter und wartbarer wird.

Zusammenfassend lässt sich sagen, dass für den Vergleich von Gleitkommazahlen in Go der empfohlene Ansatz darin besteht, die beiden Zahlen zu subtrahieren und die absolute Differenz damit zu vergleichen einen vordefinierten Schwellenwert. Diese Methode bietet eine genauere und effizientere Möglichkeit, „nahezu Gleichheit“ im Vergleich zu Bitmanipulationen zu bestimmen.

Das obige ist der detaillierte Inhalt vonWie kann ich Gleitkommazahlen in Go genau auf Gleichheit vergleichen?. 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