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
Freigeben: 2024-12-09 19:14:11
Original
437 Leute haben es durchsucht

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

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