Heim >Backend-Entwicklung >Golang >Wie kann ich Gleitkommafehler beim Konvertieren von Gleitkommazahlen in Ganzzahlen in Go vermeiden?

Wie kann ich Gleitkommafehler beim Konvertieren von Gleitkommazahlen in Ganzzahlen in Go vermeiden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-15 13:11:22474Durchsuche

How Can I Avoid Floating-Point Errors When Converting Floats to Integers in Go?

Golang: Vermeiden von Gleitkommafehlern bei Konvertierungen von Gleitkommazahlen in Int

Gleitkommaoperationen können bei der Konvertierung zwischen verschiedenen numerischen Typen zu Fehlern führen. In Go kann die Konvertierung von float64 in int aufgrund von Einschränkungen bei der Gleitkommadarstellung zu unerwarteten Ergebnissen führen.

Grundlegendes zur Gleitkommadarstellung

Computer speichern numerische Daten normalerweise im Binärformat. Allerdings können Dezimalzahlen wie 100,55 in einem Binärsystem nicht als endliche Zahl dargestellt werden.

IEEE-754 ist der von Go verwendete Standard zur Darstellung von Float64-Werten. Es verwendet 53 Bit zum Speichern von Ziffern und 11 Bit für den Exponenten, was einen endlichen Zahlenbereich ermöglicht, aber zwangsläufig Näherungen einführt.

Dezimal-Binär-Konvertierung

Bei der Konvertierung einer Dezimalzahl wie 100,55 in Die interne Darstellung von float64 kann nicht präzise ausgedrückt werden. Stattdessen wird die nächstgelegene Binärzahl verwendet, was zu einem etwas anderen Wert als dem Original führt.

Fehler bei der Float-to-Int-Konvertierung

Im Codebeispiel subtrahiert man float64(int(x )) sollte 0,55 ergeben, aber die Ausgabe liegt näher bei 0,5499999999999972. Dieser Fehler tritt auf, weil die Subtraktion zwischen zwei verschiedenen Darstellungen derselben Zahl durchgeführt wird, wobei float64(int(x)) 100,0 und nicht 100,55 darstellt.

Lösungen

Um Präzisionsfehler zu vermeiden, Betrachten Sie die folgenden Ansätze:

  • Das Ergebnis abrunden:Verwenden fmt.Printf mit einer geeigneten Formatzeichenfolge, um die Ausgabe auf die gewünschte Anzahl von Dezimalstellen zu runden.
  • Vermeiden Sie Gleitkommazahlen: Erwägen Sie bei Anwendungen mit Währungen oder präzisen Berechnungen die Darstellung von Werten als Ganzzahlen oder rationale Zahlen zur Eliminierung von Gleitkommafehlern.

Das obige ist der detaillierte Inhalt vonWie kann ich Gleitkommafehler beim Konvertieren von Gleitkommazahlen in Ganzzahlen in Go vermeiden?. 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