Heim > Backend-Entwicklung > Golang > Warum schlägt die Gleitkommagleichheit beim Vergleich von Variablen und Literalen fehl?

Warum schlägt die Gleitkommagleichheit beim Vergleich von Variablen und Literalen fehl?

Patricia Arquette
Freigeben: 2024-12-24 05:34:20
Original
601 Leute haben es durchsucht

Why Does Floating-Point Equality Fail in Go When Comparing Variables and Literals?

Gleitkommapräzision in Go: Den Unterschied zwischen Literalen und Variablen verstehen

Die Diskrepanz

In Go ist die Der folgende Codeausschnitt zeigt einen interessanten Unterschied in der Gleitkommazahl Berechnungen:

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)
}
Nach dem Login kopieren

Bei der Ausführung erzeugt dieser Code unerwartete Ergebnisse:

x == 10.1:         true
x*3.0 == 10.1*3.0: false
Nach dem Login kopieren

Während die gleichen Gleitkommaoperationen ausgeführt werden, wird entweder eine deklarierte Variable (x) oder ein Literal verwendet (10.1) schlägt die Gleichheitsprüfung fehl.

Ursprung der Unterschied

Um dieses Verhalten zu verstehen, muss man sich mit Gos Umgang mit Gleitkommazahlen befassen. Konstanten und Zahlenliterale sind zunächst untypisiert und besitzen die Eigenschaft „无限精度“. Wenn sie jedoch einer Variablen zugewiesen oder typkonvertiert werden, erben sie die Einschränkungen des Zieltyps.

Wenn x := 10.1 zugewiesen wird, verliert das Literal 10.1 aufgrund der Konvertierung in eine Gleitkommazahl etwas an Präzision. Umgekehrt behält 10,1*3,0 seine volle Genauigkeit bei der Berechnung. Dies erklärt den beobachteten Unterschied in den Werten und die falsche Gleichheitsprüfung.

Dokumentation und Begründung

Dieses Verhalten wird im Abschnitt „Floats“ von Gos Blog-Beitrag beschrieben Konstanten:

"Numerische Konstanten leben in einem numerischen Raum beliebiger Genauigkeit; sie sind nur reguläre Zahlen. Aber wann Sie werden einer Variablen zugewiesen, deren Wert in das Ziel passen muss Feinheiten der Gleitkommadarstellung in Go. Dieses Wissen ermöglicht es Entwicklern, präzisionsbezogene Probleme in ihrem Code effektiv zu antizipieren und zu bewältigen.

Das obige ist der detaillierte Inhalt vonWarum schlägt die Gleitkommagleichheit beim Vergleich von Variablen und Literalen fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage