Einsteigerfrage: zu range()

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
mikemet
User
Beiträge: 3
Registriert: Donnerstag 2. Mai 2013, 19:34

Hallo, ich lerne gerade Python3 mit dem Buch "Einstieg in Python" von Thomas Theis und habe eine Frage zu folgendem Beispielcode aus dem Buch:

Code: Alles auswählen

# Version 1
for x in range (18, 22):
    print(x/10)
print()

# Version 2
x = 1.8
for i in range(4):
    print(x)
    x = x + 0.1
Das ergibt folgende Ausgabe:
>>>
1.8
1.9
2.0
2.1

1.8
1.9000000000000001
2.0
2.1
>>>

Meine Frage, eigentlich sollten beide Ausgaben ident sein!? Wo kommen bei der Version2 die vielen Nachkommastellen her? Den Quellcode hab ich mehrmals mit dem Buch verglichen, der stimmt bzw. hab ich keine Fehler gefunden....

Ich würde mich über eine Rückmeldung sehr freuen. Natürlich ist mit klar das der Wert jetzt nicht wirklich die Welt bedeutet, mich interessiert nur ob es sich um einen Fehler handelt und ob dieser sich bei Euch reproduzieren lässt. (...oder handelt es sich um ein Problem das zwischen Tastatur und Bürostuhl ? 8) )

LG mikemet

PS: das Buch finde ich bis jetzt wirklich "Einsteigertauglich"......
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Willkommen zu Python und im Forum!

Das Problem hat nichts mit `range`, ja sogar nichtmal mit Python zu tun: Fliesskommazahlen koennen nicht alle Zahlen repraesentieren.

Python macht sich allerdings seit Python 3(.2?) einige Mehrarbeit um die Ausgabe von Fliesskommazahlen "schoen" zu machen.
BlackJack

@mikemet: Gleitkommazahlen sind ungenau. Der Rechner kann die 0.1 zum Beispiel nicht exakt speichern, weil das in der internen binären Darstellung eine Periode ergibt, ähnlich wie 1/3 im Dezimalsystem und weil der Speicher für eine Zahl endlich ist. Und beim addieren gibt es dann das Problem das nicht 0.1 addiert wird, sondern jedes mal ein Wert der ein ganz kleines bisschen kleiner ist als 0.1. Das Phänomen ist auch der Grund warum man keine zwei Gleitkommazahlen auf Gleichheit testen sollte, sondern schauen ob die Differenz klein genug ist, dass man sie als fast gleich ansehen kann.
mikemet
User
Beiträge: 3
Registriert: Donnerstag 2. Mai 2013, 19:34

WOW! :D

Ihr seid ja superschnell mit den Antworten, Danke!
Es war eine ganz vage Vermutung das es so sein könnte, da der Unterschied ja sehr klein war, ich wollte verstehen woher das kommt.

:!: DANKE :!:

LG mikemet
Antworten