Variable vs. literale Gleitkomma-Multiplikation in Go: Ein Präzisionsrätsel
In Go Vergleich von Gleitkomma-Literalen mit ihren variablen Gegenstücken kann zu überraschenden Ergebnissen führen. Betrachten Sie den folgenden Code:
x := 10.1 fmt.Println("x*3.0 == 10.1*3.0:", x*3.0 == 10.1*3.0)
Obwohl die Multiplikationsoperationen identisch sind, ist das Ergebnis falsch. Warum gibt es eine Diskrepanz?
Konstanten und Präzision
Gleitkommakonstanten und Literale in Go besitzen unbegrenzte Präzision. Bei der Zuweisung zu einer typisierten Variablen muss der Wert jedoch den Einschränkungen des Typs entsprechen. In diesem Fall wird x einem Float64 zugewiesen, der eine begrenzte Genauigkeit hat.
Präzision beibehalten
Bei expliziter Angabe eines Float-Literals, wie in 10.1*3.0, wird das Die volle Präzision bleibt erhalten, bevor der Vorgang ausgeführt wird. Im Gegensatz dazu geht beim Zuweisen eines Float-Literals zu einer Variablen die Präzision bei der Konvertierung in den Zieltyp verloren.
Auswirkungen
Dieses Verhalten ist beabsichtigt und hat Auswirkungen auf Gleitkommavergleiche. Beim Vergleich einer typisierten Variablen mit ihrem Literaläquivalent können Präzisionsunterschiede zu unerwarteten Ergebnissen führen. Wie im Go-Blogbeitrag zu Konstanten dokumentiert, existieren numerische Konstanten in einem uneingeschränkten numerischen Raum, stoßen jedoch an Grenzen, wenn sie bestimmten Typen zugewiesen werden.
Beispiel
Bedenken Sie Folgendes in Go deklarierte Konstante:
const Huge = 1e1000
Diese Konstante kann zwar in Ausdrücken verwendet werden, kann jedoch nicht einem zugewiesen werden float64-Variable aufgrund ihrer übermäßigen Präzision. Daher kann die Anweisung fmt.Println(Huge) nicht kompiliert werden.
Schlussfolgerung
Die Diskrepanz bei der Gleitkommamultiplikation zwischen Literalen und Variablen ist auf den Verlust von zurückzuführen Präzision bei der Zuweisung an typisierte Variablen. Das Verständnis dieses Verhaltens ist entscheidend, um unerwartete Ergebnisse zu vermeiden und genaue Vergleiche bei Go-Gleitkommaoperationen sicherzustellen.
Das obige ist der detaillierte Inhalt vonWarum führt die Gleitkomma-Multiplikation mit Variablen und Literalen in Go zu unterschiedlichen Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!