Heim >Backend-Entwicklung >Golang >Warum führen untypisierte und typisierte Gleitkomma-Multiplikationen in Go zu unterschiedlichen Ergebnissen?
Warum haben diese beiden float64-Werte unterschiedliche Werte?
Einführung
Bei der Arbeit mit Floating -Punktzahlen ist es wichtig, die Präzisionsbeschränkungen zu verstehen. Betrachten Sie den folgenden Go-Code:
fmt.Println(912 * 0.01) fmt.Println(float64(912) * 0.01)
(Go Playground-Link)
Die zweite Zeile erzeugt aufgrund von Gleitkomma-Präzisionsbeschränkungen das erwartete Ergebnis „9.120000000000001“.
Frage
Allerdings die erste Zeile gibt „9.12“ ohne nachgestellte Genauigkeit aus. Dies wirft die Frage auf: Warum führt Go keine Gleitkommamultiplikation für die beiden untypisierten Konstanten durch und konvertiert sie dann in ein 9,12-Literal?
Antwort
Gemäß Gemäß der Go-Sprachspezifikation werden konstante Ausdrücke exakt ausgewertet. Daher wird „912 * 0,01“ genau ausgewertet, was dasselbe ist wie „9,12“.
Wenn Sie den ersten Operanden in float64 (float64(912)) umwandeln, wird auch der andere Operand (0,01) eingegeben implizite Typumwandlung in float64. 0,01 kann in einem float64 nicht exakt dargestellt werden, daher geht die Präzision an einer anderen Stelle als im ersten Beispiel verloren. Dies erklärt die unterschiedlichen Ergebnisse, die bei der Verwendung von fmt.Println() mit unterschiedlichen Eingabeausdrücken beobachtet werden.
Das obige ist der detaillierte Inhalt vonWarum führen untypisierte und typisierte Gleitkomma-Multiplikationen in Go zu unterschiedlichen Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!