Ein Rundungsproblem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
nezzcarth
User
Beiträge: 1638
Registriert: Samstag 16. April 2011, 12:47

Qubit hat geschrieben: Montag 29. Januar 2024, 23:44 Oder anders gesagt: ich nutze bestimmt nicht Python, um mir gerade über die interne Darstellung von Zahlen Gedanken zu machen. :D
Vielleicht sehe ich das falsch, aber nach meinem Verständnis ist das keine Besonderheit von Python sondern in der Tat etwas, worüber man sich als Programmierer in den meisten Sprachen Gedanken machen muss, wenn es denn relevant wird. Ein Grundverständnis dafür, dass bei Gleitkommazahlen ein paar Dinge zu beachten sind, gehört vielleicht nicht zu den absoluten Grundlagen, aber – würde ich sagen – schon zum Handwerkszeug der meisten, die etwas Programmiererfahrung haben. Was Python angeht, wird es jedenfalls auch im offiziellen Tutorial, das jeder mal gelesen haben sollte, vermittelt, als letztes Kapitel: https://docs.python.org/3/tutorial/floatingpoint.html
Zuletzt geändert von nezzcarth am Dienstag 30. Januar 2024, 18:45, insgesamt 1-mal geändert.
Benutzeravatar
Dennis89
User
Beiträge: 1158
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

als ich das erste mal von diesem Problem hörte, habe ich mit die Seite https://floating-point-gui.de/ gespeichert.
Vielleicht lesen hier, so wie ich damals, auch ein paar mit, die das interessiert. Beinhaltet auch einige weiterführende Links.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
narpfel
User
Beiträge: 645
Registriert: Freitag 20. Oktober 2017, 16:10

Qubit hat geschrieben: Dienstag 30. Januar 2024, 11:24 Aber der (nicht ganz korrekte) Algorithmus der "round"-Funktion liefert hier als Erghebnis

Code: Alles auswählen

>>> f"{2.63:.20f}"
'2.62999999999999989342'
Der Algorithmus ist korrekt, weil du nie die reelle Zahl 2,635 gerundet hast, sondern immer den `float`-Wert `2.635`, der eben nicht 2,635 ist sondern (exakt) 1483373127265157/2251799813685248 * 2². Und das ist klar kleiner als 2,635, muss also abgerundet werden.
Qubit hat geschrieben: Dienstag 30. Januar 2024, 00:39 1) Natürlich lässt sich jede reelle Zahl beliebig genau (nach Vorgabe) berechnen.
„Natürlich“. Ja. Jede.
Antworten