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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top