Seite 1 von 1

2**10 is 2**10?

Verfasst: Sonntag 31. Oktober 2010, 12:32
von pythonsnake
Hallo,
ich habe eine Frage. Warum ist 2**10 is 2**10 false.
und z.B 2**5 is 2**5 true?

Re: 2**10 is 2**10?

Verfasst: Sonntag 31. Oktober 2010, 12:34
von querdenker
Kleiner Tipp: Rechengenauigkeit, bzw. Darstellung von Zahlen.

Re: 2**10 is 2**10?

Verfasst: Sonntag 31. Oktober 2010, 12:35
von cofi
querdenker hat geschrieben:Kleiner Tipp: Rechengenauigkeit, bzw. Darstellung von Zahlen.
Ganz falsche Richtung. Das sind Ganzzahlen.

CPython erzeugt beim Start die Zahlen 0 bis 2^8 und verwendet sie danach wieder. Fuer andere Zahlen gilt das nicht.

Re: 2**10 is 2**10?

Verfasst: Sonntag 31. Oktober 2010, 12:41
von pythonsnake
aha. der python-interpreter "rechnet" 2**10 gar nicht aus?

Re: 2**10 is 2**10?

Verfasst: Sonntag 31. Oktober 2010, 12:51
von cofi
Aeh doch?

Code: Alles auswählen

>>> 2 ** 10
1024
Das gilt auch fuer den Zahlenbereich 0..2^8 den ich angesprochen habe, nur werden dort keine neuen Zahlenobjekte erzeugt sondern die bereits vorliegenden wiederverwendet.

http://www.python-forum.de/viewtopic.php?f=1&t=24369

Re: 2**10 is 2**10?

Verfasst: Sonntag 31. Oktober 2010, 12:53
von Hyperion
pythonsnake hat geschrieben:aha. der python-interpreter "rechnet" 2**10 gar nicht aus?
Ja eben doch! Nur tut er das zwei mal und hat damit zwei unterschiedliche Objekte!

Bei Zahlen bis 255 liegen diese Objekte im Speicher und werden damit wie aus einem Cache benutzt. Damit ist das Ergebnis von 2**5 eben immer exakt dasselbe Objekt im Speicher und die Objektidentität ist eben gegeben!

Re: 2**10 is 2**10?

Verfasst: Sonntag 31. Oktober 2010, 19:39
von Darii
pythonsnake hat geschrieben:Hallo,
ich habe eine Frage. Warum ist 2**10 is 2**10 false.
und z.B 2**5 is 2**5 true?
Kann dir im Grunde genommen egal sein, da das Ergebnis deiner Ausdrücke nicht festgelegt ist und somit je nach Implementierung variieren kann.

Du stellst mit `is` die falsche Frage. Mit `is` testest ob zwei Objekte identisch sind. Interessieren wird dich aber nur, ob sie äquivalent sind. Dafür benutzt man `==` und damit kommt auch beide Male `True` raus.

Re: 2**10 is 2**10?

Verfasst: Mittwoch 3. November 2010, 20:55
von Py-Prog
Teusche ich mich da oder werden in diesem Forum überwiegend gleiche Fragen gestellt?

Re: 2**10 is 2**10?

Verfasst: Mittwoch 3. November 2010, 20:59
von Hyperion
Py-Prog hat geschrieben:Teusche ich mich da oder werden in diesem Forum überwiegend gleiche Fragen gestellt?
Na, diese Frage kam aber noch nicht so oft, als das er nervte ;-) Zudem ist es eine der interessanteren.

Re: 2**10 is 2**10?

Verfasst: Mittwoch 3. November 2010, 22:21
von Xynon1
Hyperion hat geschrieben:Na, diese Frage kam aber noch nicht so oft, als das er nervte ;-) Zudem ist es eine der interessanteren.
stimmt, ich wusste es auch noch nicht.

Re: 2**10 is 2**10?

Verfasst: Donnerstag 4. November 2010, 00:00
von Darii
Py-Prog hat geschrieben:Teusche ich mich da oder werden in diesem Forum überwiegend gleiche Fragen gestellt?
Deine Frage kommt jedenfalls zum ersten Mal.

Re: 2**10 is 2**10?

Verfasst: Donnerstag 4. November 2010, 20:47
von Py-Prog
Xynon1 hat geschrieben:
Hyperion hat geschrieben:Na, diese Frage kam aber noch nicht so oft, als das er nervte ;-) Zudem ist es eine der interessanteren.
stimmt, ich wusste es auch noch nicht.
Ich weiß das doch auch nur weil ich einen Früheren Thread darüber gelesen habe.