divisione intera rispetto al quoziente pavimento: il motivo per cui questo risultato sorprendente?
-
19-09-2019 - |
Domanda
Il //
"divisione intera" operatore di Python mi ha sorpreso, oggi:
>>> math.floor(11/1.1)
10.0
>>> 11//1.1
9.0
Il documentazione legge "(pavimentato) quoziente di xe y". Quindi, perché è Math.floor (11 / 1.1) pari a 10, ma 11 // 1.1 pari al 9?
Soluzione
Poiché 1.1 non può essere rappresentato in forma binaria esattamente; l'approssimazione è un più piccolo superiori a 1,1 - quindi il risultato della divisione è un po 'troppo piccolo.
Provare quanto segue:
In Python 2, tipo alla console:
>>> 1.1
1.1000000000000001
In Python 3.1, la consolle mostrerà 1.1
, ma internamente, è ancora lo stesso numero.
Ma:
>>> 11/1.1
10.0
Come sottolinea gnibbler, questo è il risultato di "arrotondamento interno" entro i limiti di precisione disponibili galleggianti. E come sottolinea il MYYN nel suo commento, //
utilizza un algoritmo diverso per calcolare il risultato della divisione piano di math.floor()
al fine di preservare a == (a//b)*b + a%b
nel miglior modo possibile.
Utilizzare il tipo Decimal
se avete bisogno di questa precisione.