mi è stato chiesto (di nuovo) oggi per spiegare il motivo per cui divisione intera in Python restituisce il piano del risultato, invece di troncare verso lo zero come C.
Per i numeri positivi, non c'è nessuna sorpresa:
>>> 5//2
2
Ma se uno degli operandi è negativo, il risultato è pavimentata, cioè, arrotondato per eccesso (verso l'infinito negativo):
>>> -5//2
-3
>>> 5//-2
-3
Questo disturba alcune persone, ma c'è una buona ragione matematica. La divisione tra interi (//) e la sua sorella, l'un'operazione di modulo (%), andare insieme e soddisfare una bella matematico rapporto (tutte le variabili sono numeri interi):
a/b = q with remainder r
tale che
b*q + r = a and 0 <= r < b
(assuming a and b are >= 0).
Se si desidera che il rapporto da estendere per negativo un (mantenendo b positiva), sono disponibili due opzioni: se si troncano q verso lo zero, r diventerà negativo, in modo che le modifiche invarianti a 0 < = abs (r) < altrimenti, è possibile floor q verso infinito negativo e l'invariante rimane 0 < = r < b. [aggiornamento: risolto questo paragrafo]
Nella teoria dei numeri matematici, i matematici preferiscono sempre la seconda opzione (vedere ad esempio Wikipedia). Per Python, ho fatto la stessa scelta perché ci sono alcune interessanti applicazioni dell'operazione modulo in cui il segno di a non è interessante. Prendi in considerazione di prendere un timestamp POSIX (secondi dall'inizio del 1970) e trasformarlo in l'ora del giorno. Poiché ci sono 24 * 3600 = 86400 secondi in un giorno, questo calcolo è semplicemente t% 86400. Ma se dovessimo esprimere i tempi prima del 1970 usando numeri negativi, la regola "truncate verso zero" darebbe un risultato senza senso! Usando la regola del piano tutto funziona bene .
qual è la domanda? Non lo sai? se vuoi saperlo per una qualsiasi delle lingue, provalo? – usethedeathstar
Scusa, intendevo -1 non 1. Non conosco la risposta e mi sento totalmente confuso. – ivs
Non c'è risposta. La "divisione intera" non è un concetto ben definito e le specifiche di ogni lingua possono scegliere la pavimentazione o il troncamento verso 0 come risultato definito per l'operazione. – geoffspear