Seite 1 von 1

falsches ergebnis bei division negativer ints

Verfasst: Freitag 7. September 2012, 09:26
von bone2
ich wunder mich das es nicht funktioniert und dann sowas

Code: Alles auswählen

>>> 240/64
3
>>> -240/64
-4
>>> int(-3.75)
-3
>>> -240/-64
3
>>> 240/-64
-4
kann mir das jemand erklären?

Re: falsches ergebnis bei division negativer ints

Verfasst: Freitag 7. September 2012, 09:31
von lunar
@bone2 RTFM:
For (plain or long) integer division, the result is an integer. The result is always rounded towards minus infinity: 1/2 is 0, (-1)/2 is -1, 1/(-2) is -1, and (-1)/(-2) is 0. Note that the result is a long integer if either operand is a long integer, regardless of the numeric value.

Re: falsches ergebnis bei division negativer ints

Verfasst: Freitag 7. September 2012, 09:43
von bone2
danke

aber hm... hm das is verwirrend

naja: http://python-history.blogspot.de/2010/ ... loors.html

Re: falsches ergebnis bei division negativer ints

Verfasst: Freitag 7. September 2012, 09:59
von lunar
@bone2 Wenn man die Dokumentation nicht liest, ist alles verwirrend…

Re: falsches ergebnis bei division negativer ints

Verfasst: Freitag 7. September 2012, 11:05
von bone2
:roll:

ich habe vieles gelesen, aber den teil wohl elegant überlesen.
mit verwirrend meine ich nur, das das gegen meine antrainierte mathelogik im kopf geht. hatte so einen fall noch nie. java rundet zB auch nicht richtung -∞ sondern schneidet richtung 0 ab.

warum ohne die doku zu lesen der rest verwirrend sein soll verstehe ich allerdings nicht. python is wie die meisten sprachen ziemlich logisch aufgebaut. wenn man ne funktion sucht, guckt man halt mal in die doku.

Re: falsches ergebnis bei division negativer ints

Verfasst: Freitag 7. September 2012, 11:46
von EyDu
bone2 hat geschrieben:mit verwirrend meine ich nur, das das gegen meine antrainierte mathelogik im kopf geht. hatte so einen fall noch nie. java rundet zB auch nicht richtung -∞ sondern schneidet richtung 0 ab.
Was haben Mathematik und die Umsetzung von Rundung in Java denn gemeinsam? Beide Arten zu Runden sind prinzipiell korrekt und haben ihre Vor- und Nachteile. Bei Python hat man sich eben für die mathematisch konsistente Variante entschieden.

Re: falsches ergebnis bei division negativer ints

Verfasst: Freitag 7. September 2012, 11:51
von lunar
@bone2 „Logisch“ meint in Deinem Beitrag wohl eher „verhält sich so wie ich persönlich es intuitiv erwarte“. Deswegen musst Du die Dokumentation lesen, und zwar allerspätestens nachdem Du festgestellt hast, dass sich eine Operation nicht entsprechend Deinen Erwartungen verhalten hat, sonst werden Dich früher oder später noch andere Teile in Python so sehr verwirren, dass Du Dir die Dokumentation von anderen vorlesen lassen musst.

Nichts für ungut… :)

Re: falsches ergebnis bei division negativer ints

Verfasst: Freitag 7. September 2012, 12:30
von bone2
ja. es hat so sehr gegen meine erwartung verstoßen, das ich nichtmal auf die idee gekommen bin in der doku nachzugucken.

aber ist fürs nächste mal gemerkt

bin nun auch immernoch am überlegen ob das in irgendwelchen vergangenen, abgeschlossenen projekten zu fehlern führen könnte, sollten da irgendwie mal negative zahlen auftauchen

bin in dem halben jahr python noch über nix so gestolpert wie das jetzt hier :)

Re: falsches ergebnis bei division negativer ints

Verfasst: Montag 10. September 2012, 10:58
von mkesper
In der Tat verstößt das gegen alle Erwartungen.
Das Verhalten ändert sich daher in Python 3.x.
In Python 2.7 empfiehlt es sich, stets

Code: Alles auswählen

from __future__ import division
an den Anfang des Quellcodes zu setzen.

Re: falsches ergebnis bei division negativer ints

Verfasst: Montag 10. September 2012, 13:41
von lunar
@mkesper Der OP fragte nach dem Rundungsverhalten der Ganzzahldivision, nicht nach der Ganzzahldivision an sich. Daran hat sich in Python 3 nichts verändert.

"from __future__ import division" ist ein ganz anderes Thema, und ändert nur die Semantik des "/"-Operators von Ganzzahl- zu Fließkommadivision, beeinflusst aber nicht das Rundungsverhalten der Ganzzahldivision.