ich gefragt wurde (wieder) heute zu erklären, warum Integer-Division in Python den Boden des Ergebnisses zurück statt
Für positive Zahlen auf Null wie C. Kürzen, gibt es keine Überraschung:
>>> 5//2
2
Aber wenn einer der Operanden negativ ist, wird das Ergebnis platt, dh gerundet weg von Null (in Richtung negativ unendlich):
>>> -5//2
-3
>>> 5//-2
-3
Das stört einige Leute, aber es gibt einen guten mathematischen Grund. Die ganzzahligen Teilungsoperation (//) und seine Geschwister, die Modulo Betrieb (%), gehen zusammen und erfüllen eine schöne mathematische Beziehung (alle Variablen sind ganze Zahlen):
a/b = q with remainder r
so dass
b*q + r = a and 0 <= r < b
(assuming a and b are >= 0).
wenn Sie die Beziehung für die negative ein (wobei b positiv) erweitern möchten, haben Sie zwei Möglichkeiten: wenn Sie q gegen Null gestutzt, r wird negativ werden, so dass die unveränderliche Änderungen 0 < = abs (r) < Andernfalls können Sie q gegen negative Unendlichkeit floor und die Invariante bleibt 0 < = r < b. [update: fixed this para]
In der mathematischen Zahlentheorie bevorzugen Mathematiker immer die letzte Wahl (siehe z.B. Wikipedia). Für Python habe ich die selbe Wahl getroffen, weil es einige interessante Anwendungen der modulo Operation gibt, wo das Zeichen von a uninteressant ist. Erwägen Sie, einen POSIX-Zeitstempel (Sekunden seit Anfang 1970) zu nehmen und ihn in der Tageszeit zu verwandeln. Da es 24 * 3600 = 86400 Sekunden an einem Tag gibt, ist diese Berechnung einfach t% 86400. Aber wenn wir mal vor 1970 mit negativen Zahlen ausdrücken würden, würde die "truncate in Richtung Null" -Regel ein bedeutungsloses Ergebnis geben! Mit der Stockwerksregel funktioniert alles gut.
was ist die Frage? Weißt du es nicht? Wenn Sie es für eine der Sprachen wissen wollen, probieren Sie es einfach aus? – usethedeathstar
Sorry, ich meinte -1 nicht 1. Ich kenne die Antwort nicht und ich fühle mich total verwirrt. – ivs
Es gibt keine Antwort. „Integer Division“ ist nicht ein gut definiertes Konzept und jede Spezifikation der Sprache kann für den Betrieb Boden oder Verkürzung auf 0 als definiertes Ergebnis wählen. – geoffspear