Heim >Backend-Entwicklung >Golang >Warum führen untypisierte und typisierte Gleitkomma-Multiplikationen in Go zu unterschiedlichen Ergebnissen?

Warum führen untypisierte und typisierte Gleitkomma-Multiplikationen in Go zu unterschiedlichen Ergebnissen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-25 16:32:11413Durchsuche

Why Do Untyped and Typed Floating-Point Multiplications in Go Produce Different Results?

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!

Stellungnahme:
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