falsches ergebnis bei division negativer ints

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
bone2
User
Beiträge: 12
Registriert: Freitag 22. Juni 2012, 11:36

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?
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.
bone2
User
Beiträge: 12
Registriert: Freitag 22. Juni 2012, 11:36

danke

aber hm... hm das is verwirrend

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

@bone2 Wenn man die Dokumentation nicht liest, ist alles verwirrend…
bone2
User
Beiträge: 12
Registriert: Freitag 22. Juni 2012, 11:36

: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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
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… :)
bone2
User
Beiträge: 12
Registriert: Freitag 22. Juni 2012, 11:36

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 :)
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

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.
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.
Antworten