Seite 1 von 1

Datentyp für Rechenoperation

Verfasst: Dienstag 4. Mai 2021, 09:19
von rockzm
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!

Re: Datentyp für Rechenoperation

Verfasst: Dienstag 4. Mai 2021, 11:30
von Sirius3
Gleitkommazahlen haben eine Genauigkeit von ungefähr 16 Dezimalstellen, die von Dir benötigten 40 Dezimalstellen können nicht gespeichert werden. Also wird gerundet.

Re: Datentyp für Rechenoperation

Verfasst: Mittwoch 5. Mai 2021, 13:47
von /me
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?