Die Präzision von Gleitkommazahlen in Go: float32 vs. float64
In Go werden Gleitkommazahlen mithilfe des IEEE dargestellt 754-Binärformat zur Basis 2. Die Genauigkeit einer Gleitkommazahl bezieht sich auf die Anzahl der Bits, die zur Darstellung ihrer Mantisse verwendet werden, was die Genauigkeit der Zahl bestimmt. Go bietet zwei gängige Gleitkommatypen: float32 und float64.
Der Unterschied zwischen diesen Typen liegt in ihrer Präzision. Während float32 eine 23-Bit-Mantisse hat, hat float64 eine 52-Bit-Mantisse. Diese höhere Präzision ermöglicht es float64, einen größeren Wertebereich und mit größerer Genauigkeit im Vergleich zu float32 darzustellen.
Um dies zu veranschaulichen, betrachten wir das bereitgestellte Beispiel:
func main() { a := float64(0.2) // Initializing a float64 variable a += 0.1 a -= 0.3 var i int for i = 0; a < 1.0; i++ { a += a } fmt.Printf("After %d iterations, a = %e\n", i, a) }
Dieses Programm demonstriert die Akkumulation von Gleitkommafehlern bei der Ausführung sich wiederholender Operationen an einem Wert. In diesem Fall wird die Variable „a“ mit einem Wert von 0,2 initialisiert und anschließend werden Additions- und Subtraktionsoperationen mit 0,1 bzw. 0,3 ausgeführt. Dies wird wiederholt, bis 'a' größer oder gleich 1,0 wird.
Wenn Sie dieses Programm mit float32 anstelle von float64 ausführen, gelangt es in eine Endlosschleife. Dies liegt daran, dass die binäre Darstellung von 0,1 in float32 geringfügig von ihrem tatsächlichen Dezimalwert abweicht, was zu einem Rundungsfehler führt. Folglich wird der Wert von „a“ nicht genau akkumuliert und die Schleife wird auf unbestimmte Zeit fortgesetzt.
Andererseits hat float64 eine höhere Präzision und kann Werte genauer darstellen. Daher beendet dasselbe Programm, das float64 verwendet, schließlich die Schleife, wenn 'a' 1,000000e 00 erreicht.
Um den Unterschied in der Genauigkeit besser zu verstehen, können Sie die Funktionen math.Float32bits und math.Float64bits zum Konvertieren von Floating verwenden -Punktwerte auf ihre binären Darstellungen. Dadurch können Sie die Verteilung der Bits untersuchen und die Ursachen für Präzisionsunterschiede zwischen float32 und float64 identifizieren.
Das obige ist der detaillierte Inhalt vonGo's float32 vs. float64: Wie viel Präzision brauchen Sie wirklich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!