Parecen ser iguales para números pequeños pero diferentes para grandes.

Por ejemplo:

a = int(1267650600228229401496703205376/10)
b = 1267650600228229401496703205376 // 10
print(a - b) # prints 7036874417767

a = int(1493845793475/10)
b = 1493845793475 // 10
print(a - b) # prints 0

¿Cómo?

2
R.M. 17 feb. 2017 a las 18:21

3 respuestas

La mejor respuesta

En Python 3 / realiza la división flotante, que tiene 53 bits de precisión; // realiza la división de piso, que no tiene límite de precisión cuando ambos operandos son enteros (aparte de las limitaciones impuestas por la RAM disponible).

Puede obtener el comportamiento de Python 3 en Python 2 utilizando la importación true_division __future__.

3
PM 2Ring 17 feb. 2017 a las 15:38

Complementando las respuestas existentes, vale la pena mencionar que no es necesario ir tan lejos para observar una diferencia:

>>> -1//2
-1
>>> int(-1/2)
0
1
Paul Panzer 17 feb. 2017 a las 16:03

Como explicó @khelwood, en Python 3, a/b realiza la división flotante. Intente escribir 1/2 en un intérprete; obtendrá 0.5, no 0.

Entonces, en su ejemplo, 1267650600228229401496703205376 / 10 en realidad es igual a 126765060022822940149670320537.6 = 1.267650600228229401496703205376e+29 (división de coma flotante), pero debido a la inexactitud de los flotadores, Python lo evalúa como 1.2676506002282295e+29, por lo que ha perdido precisión , lo que explica la diferencia.

Consulte PEP 238.

1
B. Eckles 17 feb. 2017 a las 15:39