Gleitkomma-Präzisionsunterschiede in Go: Konstanten vs. Variablen
In Go behalten Gleitkomma-Literale und -Konstanten ihre willkürliche Genauigkeit bei, bis sie zugewiesen werden zu einem bestimmten Typ. Bestimmte Vorgänge und Zuweisungen führen jedoch zu Präzisionsunterschieden, die unerwartet sein können.
Bedenken Sie den folgenden Code:
package main import ( "fmt" ) func main() { x := 10.1 fmt.Println("x == 10.1: ", x == 10.1) fmt.Println("x*3.0 == 10.1*3.0:", x*3.0 == 10.1*3.0) }
Dieser Code erzeugt die Ausgabe:
x == 10.1: true x*3.0 == 10.1*3.0: false
Warum Sind diese Ausdrücke nicht gleich, obwohl dieselbe Gleitkommaoperation ausgeführt wird?
Untypisierte Konstanten und Variablen
Zahlenliterale und Konstanten in Go sind untypisiert und mit unbegrenzter Genauigkeit. Bei der Zuweisung zu einer Variablen wie x := 10.1 wird das Literal in den Typ der Variablen (in diesem Fall float64) konvertiert und verliert etwas an Präzision.
Konstanten mit voller Präzision
Im Gegensatz dazu behalten wörtliche Ausdrücke wie 10.1*3.0 vor der Auswertung die volle Präzision bei. Wenn sie einer Variablen zugewiesen werden, werden sie sofort in den Typ der Variablen konvertiert, um sicherzustellen, dass die Präzision erhalten bleibt.
Überlegungen zur Präzision
Das Verständnis der Unterschiede in der Präzisionshandhabung kann von entscheidender Bedeutung sein für genaue Gleitkommaberechnungen. Wenn Sie beispielsweise Werte mit einer bestimmten Toleranz vergleichen, ist es wichtig, Literale oder Ausdrücke mit voller Präzision zu verwenden, um falsch positive Ergebnisse zu vermeiden.
Dokumentation
Dieses Verhalten ist gut -dokumentiert im Go-Blogartikel „Constants“ unter der Überschrift „Floats“, in dem erklärt wird, dass numerische Konstanten zwar eine willkürliche Genauigkeit haben, aber in den Bereich von passen müssen Variable, der sie zugewiesen sind.
Fazit
Der Unterschied in der Präzision zwischen Gleitkommakonstanten und Variablen in Go ist beabsichtigt und ermöglicht eine größere Flexibilität und einen besseren Leistungsaustausch -offs in Gleitkommaoperationen. Durch das Verständnis dieser Präzisionsunterschiede können Programmierer ihren Code im Hinblick auf Genauigkeit und Effizienz optimieren.
Das obige ist der detaillierte Inhalt vonWarum führen Gleitkommavergleiche in Go manchmal zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!