Perché -103/100 == -2
ma 103/100 == 1
in Python? Non riesco a capire perché.Perché -103/100 == -2 ma 103/100 == 1 in Python?
risposta
La divisione intera si arrotonda sempre verso il basso (verso l'infinito negativo).
normale o divisione intero lungo produce un valore intero dello stesso tipo; il risultato è quello della divisione matematica con la funzione floor applicata al risultato.
http://docs.python.org/2/reference/expressions.html#binary-arithmetic-operations
Ciò consente la divisione intera e modulo (resto, %
) operatori per collegare piacevolmente attraverso l'identità x == (x/y)*y + (x%y)
.
piano (x) è il massimo intero maggiore di x.
Potrebbe valere la pena aggiungere una nota su '(a // b) * b + a% b == a'. – abarnert
(+1) L'immagine è fantastica. Per quanto riguarda la formulazione, trovo meno ambiguo dire "giri verso l'infinito negativo" piuttosto che "arrotondare". – NPE
[Wikipedia] (http: //en.wikipedia.org/wiki/Modulo_operation # Remainder_calculation_for_the_modulo_operation) in realtà ha una spiegazione abbastanza buona del perché la maggior parte delle lingue (C90 è un'eccezione notevole) hanno una divisione troncata e un modulo di segno di dividendo, o una divisione di pavimento e un modulo di segno di divisore. O uno è ragionevole (come una terza opzione, con modulo sempre positivo), ma il modo in cui Python ha scelto è più comune sia nella teoria dei numeri che nell'aritmetica pratica. – abarnert
La divisione in intero prende (credo) il floor() di qualsiasi oggetto uscente, più o meno.
Quindi -2 per la prima divisione e 1 per la seconda.
- 1. In Javascript, perché [1, 2] == [1, 2] o ({a: 1}) == ({a: 1}) falso?
- 2. python SyntaxError con dict (1 = ...), ma {1: ...} funziona
- 3. Perché (true && 1) restituisce 1, ma (1 && true) restituisce true?
- 4. Perché fare in modo che -1 e -2 siano entrambi hash a -2 in CPython?
- 5. Perché non pow (sqrt (-1), 2) restituisce -1?
- 6. Perché il Refcount è 2 non 1?
- 7. Selenium 1 vs 2
- 8. Perché SELECT 2^3 restituisce 1 in SQL Server?
- 9. L'indirizzo IP della macchina in PHP fornisce: 1 ma perché?
- 10. 2 modi per "ClearContents" su VBA Excel, ma 1 funziona correttamente. Perché?
- 11. In Python Dizionari, come fa ((j * 5) +1)% 2 ** I cicla tutto 2 ** i
- 12. Perché l'operazione di trasmissione fallisce nel caso 1 ma succede nel caso 2?
- 13. variabile 1 = ({istruzione 1; istruzione 2;}) in C
- 14. Qual è la prova di (N-1) + (N-2) + (N-3) + ... + 1 = N * (N-1)/2
- 15. Perché Python 3 è notevolmente più lento di Python 2?
- 16. Perché s [len (s) -1: -1: -1] non funziona?
- 17. Ritorno 1 ° da 1, 2 ° da 2, ..., 11 da 11,
- 18. Perché "www" .count ("ww") restituisce 1 e non 2?
- 19. Perché il risultato 2 + 1 e 0 è 0?
- 20. Python: Come posso analizzare {apple: "1", arancione: "2"} nel dizionario?
- 21. Perché il numero intero massimo in java 2^31 - 1 e non 2^31
- 22. Perché "[:: - 1]" restituisce una lista inversa in Python?
- 23. Regex $ 1, $ 2, ecc.
- 24. aggiornamento angolare 1-2
- 25. Perché foreach aumenta il conteggio di 2 invece di 1?
- 26. Perché int32 ha valore massimo 2^31 -1
- 27. Perché è (1/2) * x diverso da 0,5 * x?
- 28. Perché questo codice non è definito ma non 2?
- 29. Perché 2 /// 2 è 2 in Javascript?
- 30. Perché 0 è vero ma falso è 1 nella shell?
Rotazioni di divisione intera verso l'infinito negativo. –
Stai chiedendo come funziona, o perché è stato progettato per funzionare in questo modo? – abarnert
@abarnert sia suppongo che – frazras