Datentyp für Rechenoperation

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.
Antworten
rockzm
User
Beiträge: 1
Registriert: Dienstag 4. Mai 2021, 09:12

Guten Tag,

bin ein Neuling, der gerade seine ersten Schritte durch den Programmierdschungel macht.
Bei einer Aufgabe komme ich jedoch leider nicht weiter.

print(5 + 10**40 - 10**40)

Ergebnis: 5

print(5.0 + 10**40 - 10**40)

Ergebnis: 0.0
Meine Erwartung: 5.0

Kann mir jemand bitte in 1-2 Sätzen erklären, wieso die Gleitkommazahl den Unterschied macht?

Besten Dank!
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Gleitkommazahlen haben eine Genauigkeit von ungefähr 16 Dezimalstellen, die von Dir benötigten 40 Dezimalstellen können nicht gespeichert werden. Also wird gerundet.
Benutzeravatar
/me
User
Beiträge: 3552
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Die Reihenfolge macht dabei auch noch einen Unterschied.

Code: Alles auswählen

>>> print(5.0 + 10**40 - 10**40)
0.0
>>> print(10**40 - 10**40 + 5.0)
5.0
Im ersten Fall ergibt sich nach 5.0 + 10**40 eine Zahl, die von der internen Darstellung her identisch ist mit 10**40. Dann ziehst du den gleichen Wert ab und landest bei 0.0. Im zweiten Fall landest du nach 10**40 - 10**40 bei 0.0 und wenn du dazu dann die 5.0 addierst, dann lässt sich das noch hinreichend problemlos darstellen.

Das betrifft übrigens nicht nur Python sondern eigentlich alle Programmiersprachen. Lesetipp: Is floating point math broken?
Antworten