lunes, 20 de enero de 2020

Comentarios sobre las respuestas no deseadas de las instrucciones "residuo" y "cociente" de muchas herramientas de cálculo

Las instrucciones básicas de muchas herramientas de cálculo no dan el resultado esperado al utilizar las instrucciones al uso para efectuar calcular el resto y el cociente de una división entera si el dividendo o bien el divisor son, en general, negativos. Probando algunas de estas instrucciones con el lenguaje de programación/herramienta de cálculo Python me he dado cuenta de ello. También lo he comprobado con la calculadora TI Voyage 200 y con el programa de cálculo simbólico MAXIMA, con los mismos resultados incorrectos de acuerdo con el teorema de la división entera (TDE), que recordemos que afirma lo siguiente:

Sean dos números enteros $a$ ( dividendo ) y $b\neq 0$ ( divisor ), entonces existen otros dos números enteros $q$ (cociente) y $r$ (resto), únicos, tales que:
i) $a=bq+r$
ii) $0\le r \prec |b|$

Por tanto, hay que tener muy en cuenta estos resultados inesperados en los cálculos con programas y herramientas de cálculo en los que se hagan uso de las instrucciones 'cociente' y 'resto' al trabajar con números enteros. No obstante, todo va bien si el dividendo y el divisor son positivos, incluso si el dividendo es negativo y el divisor positivo, pero se obtienen respuestas incorrectas.

-oOo-

He hecho las siguientes pruebas, por si queréis reproducirlas:

Toda va bien ...
Python responde con los resultados correctos del cociente y el resto si el dividendo y el divisor son positivos, incluso si el dividendo es menor que el divisor; y también si el dividendo es negativo y el divisor es positivo. Así, por ejemplo, según el TDE, si a:=9 y b:=5, entonces $r=4$ y $q=1$ ( lápiz y papel ), y, mediante Python, se obtienen estos resultados: para a//b (cociende de a/b), 1 y para a%b (resto de a/b ), 4. Así, pues, todo va bien con números enteros positivos. También se obtienen los resultados correctos si $a\prec b$ ( el dividendo es menor que el divisor ): el cociente ha de ser cero, q=0, y el resto ha de ser igual al divisor, r=b; en efeto, pongamos que $a:=1$ y $b:=2$, con Python obtenemos también en este caso lo que se espera a//b es 0 y de a%b, 2. Incluso si el dividendo es negativo y el divisor postivo, también se obtiene lo correcto; por ejemplo, si $a:=-9$ y $b:=5$, el cociente, según el TDE, ha de ser -2 y el resto 1, y, así es, en efecto: haciendo a//b se obtiene -2 y haciendo a%b, 1, como debe ser.

Pero se obtienen respuestas inesperadas en otros casos ...
Ahora bien, Python da respuestas incorrectas -- como también las da MAXIMA, así como la calculadora TI Voyage 200 ( No lo he probado de momento con otras herramientas ) -- para el resto y el cociente en los otros casos, cuando el dividendo es positivo y el divisor es negativo, y cuando ambos son negativos. Por ejemplo, según el TDE, si a:=9 y b:=-5, entonces r=4 y q=-1; y, sin embargo, estas no son las respuestas de Python: haciendo a//b se obtiene como respuesta -2 (cociente) y haciendo a%b, -1 (resto). Veamos a continuación otro ejemplo de la incorrección de los resultados obtenidos, para a:=-9 y b:=-5, según el TDE, r=1 y q=-2; ahora bien, con Python, a//b responde 1 ( y no -2) y a&b, -4, en lugar de 1.

$\square$