Go Float-Vergleich: Ein effizienter Ansatz für nahezu Gleichheit
In Go kann der Vergleich zweier Floats (float64) auf Gleichheit eine knifflige Aufgabe sein aufgrund der Einschränkungen der IEEE 754-Gleitkommadarstellung. Während die herkömmliche Methode „abs(diff) < epsilon“ eine Näherung liefert, kann sie zu Inkonsistenzen führen.
Vorgeschlagene Lösung: Vergleich auf Bitebene
Ein Vorschlag Die Lösung schlägt vor, die bitweise Darstellung der float64-Werte zu vergleichen. Der Grundgedanke ist, dass ein Unterschied von einem Bit in der Binärdarstellung nahezu Gleichheit gewährleistet, da jeder größere Unterschied zu einem anderen Vorzeichenbit oder Exponenten führen würde.
Implementierung:
func Equal(a, b float64) bool { ba := math.Float64bits(a) bb := math.Float64bits(b) diff := ba - bb if diff < 0 { diff = -diff } // accept one bit difference return diff < 2 }
Bewertung:
Obwohl dieser Ansatz vielversprechend erscheinen mag, hat er Nachteile Einschränkungen:
Empfohlene Lösung: Gleitkommasubtraktion
Eine zuverlässigere und Ein effizienter Ansatz für nahezu Gleichheit besteht darin, einfach die beiden Gleitkommazahlen zu subtrahieren und zu prüfen, ob die Differenz kleiner als ein vordefinierter Wert ist Schwellenwert:
const float64EqualityThreshold = 1e-9 func almostEqual(a, b float64) bool { return math.Abs(a - b) <= float64EqualityThreshold }
Diese Methode bewahrt die Präzision der Floats und liefert konsistente Ergebnisse, was sie zu einer robusten Lösung für den Vergleich von Float64-Werten auf nahezu Gleichheit macht.
Das obige ist der detaillierte Inhalt vonWie kann ich Gleitkommazahlen in Go effizient auf nahezu Gleichheit vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!