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

Wie kann man Gleitkommazahlen in Go genau auf Gleichheit vergleichen?

Susan Sarandon
Freigeben: 2024-12-10 08:14:09
Original
216 Leute haben es durchsucht

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

Go Float-Vergleich: Ein umfassender Ansatz

Der Vergleich von Gleitkommazahlen (Floats) auf Gleichheit in Go erfordert aufgrund der Inhärente Einschränkungen und Komplexitäten der Gleitkomma-Arithmetik.

Verwendung von Bit Darstellung: Eine begrenzte Lösung

Der bereitgestellte Code vergleicht Floats, indem er ihre binären Darstellungen untersucht und einen Unterschied von einem Bit berücksichtigt. Dieser Ansatz ist jedoch fehlerhaft, da er die Bedeutung der Bitposition in der Binärdarstellung außer Acht lässt. Beispielsweise kann ein Unterschied im niedrigstwertigen Bit bei sehr großen Floats keine Rolle spielen, während er bei sehr kleinen Floats eine erhebliche Abweichung darstellen könnte.

Ein präziserer und allgemeinerer Ansatz

Eine robustere und genauere Methode besteht darin, die Differenz zwischen den beiden Floats mithilfe der Funktion math.Abs ​​zu berechnen. Durch Festlegen eines geeigneten Schwellenwerts können Sie feststellen, ob der Unterschied vernachlässigbar ist, und die Floats als „nahezu gleich“ betrachten.

Mit diesem Ansatz können Sie:

  • sowohl kleine als auch große Floats verarbeiten effektiv
  • Beseitigen Sie die Subjektivität der Ein-Bit-Differenz-Heuristik
  • Legen Sie den Gleichheitsschwellenwert basierend auf der spezifischen Anwendung fest Anforderungen

Beispielimplementierung

Unten finden Sie eine Beispielimplementierung:

import (
    "fmt"
    "math"
)

const float64EqualityThreshold = 1e-9

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

func main() {
    a := 0.1
    b := 0.2
    fmt.Println(almostEqual(a + b, 0.3)) // true
}
Nach dem Login kopieren

Diese Lösung ist allgemeiner und anpassungsfähiger, sodass Sie Folgendes tun können Behandeln Sie verschiedene Szenarien und legen Sie den Gleichheitsschwellenwert entsprechend Ihrer Anwendung fest.

Das obige ist der detaillierte Inhalt vonWie kann man 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