2012-10-11 26 views
6

Sé que la división entera siempre devolverá la misma respuesta que el truncamiento de un resultado de coma flotante si los números son positivos. ¿Es verdad si uno o ambos son negativos?División de enteros: ¿es a // b == int (a/b) verdadero para todos los enteros a, b?

Tenía curiosidad por saber si había una expresión de división entera que devolviera los mismos resultados en Python 2 y Python 3 (y sí, sé acerca de from __future__ import division).

P.S. Vamos a ignorar el desbordamiento de punto flotante por el momento.

+1

*" una expresión división entera que devolvería los mismos resultados en Python 2 y Python 3 "* ¿Vienes de nuevo? – NullUserException

+1

@NullUserException, en Python 3 si usa '/' para dividir dos enteros, obtendrá un resultado de punto flotante. Este es un gran cambio con respecto a Python 2. '//' ahora es necesario para obtener el comportamiento anterior. –

+0

Todavía no entiendo por qué se elevan automáticamente a flotación ... me parece tonto ... Quiero decir 'int/int = int' es un principio básico de CS ... –

Respuesta

9

No es cierto en Python 3, y se puede probar por ti mismo:

>>> int(-1/3) == -1//3 
False 

La división entera y módulo de a y b dando q (cociente) y r (el resto), respectivamente, serán siempre los números volver que satisfacen b*q + r == a y (a*b)>0 == q>0 (es decir, a*b y q tienen el mismo signo) y abs(r) < abs(q). La expresión int(q) simplemente siempre se redondea hacia 0 si q es un número de coma flotante.

Siempre será cierto para Python 2 a menos que hagas from __future__ import division, pero eso es porque a/b == a//b si a y b son enteros en Python 2.

+0

'>>> int (-1/3) == -1 // 3' ->' True' Obtuve que eran ciertas cuando lo intenté en py26 ... –

+0

@JoranBeasley - Eso es porque en Python 2.6 'a/b == a // b' si' a' y 'b' son enteros. – Omnifarious

+0

@JoranBeasley Porque en Python 2, '/' con dos operandos enteros hace exactamente lo que hace '//'. Estamos hablando de Python 3 (compatibilidad) aquí, y en Python 3 son diferentes. – delnan

Cuestiones relacionadas