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!