Hola Ricardo, facilítame la vida, indícame quien está mal con respecto a las 
matemática, las calculadoras o Python, espero que la respuesta no sea “ninguna” 
porque entonces tendría que afirmar que sabía más antes de preguntar.
Saludos, Johnny Alonso
 
De: Python-es 
[mailto:python-es-bounces+johnny.alonso.quintero=gmail....@python.org] En 
nombre de Miguel Manzano
Enviado el: domingo, 25 de diciembre de 2016 1:55 a. m.
Para: La lista de python en castellano
Asunto: Re: [Python-es] Python 3.5.2
 
Ricardo y David. Nunca pensé que iba a disfrutar tanto de una conversación 
sobre precedencia de operadores. ;P
 
Saludos.
 
El 25/12/2016 7:15, "Ricardo Cárdenes" < <mailto:ricardo.carde...@gmail.com> 
ricardo.carde...@gmail.com> escribió:
Añado, al respecto de calculadoras: en una normal, donde no se pueden 
introducir expresiones aritméticas, sino que lo que hay en pantalla se toma 
siempre como un operando completo, hubiese esperado lo contrario, ya que estoy 
solicitando explícitamente elevar al cuadrado el número -2 y entonces no hay 
ningún tipo de duda de que el resultado será "4" y no "-4"
 
2016-12-24 20:05 GMT-10:00 Ricardo Cárdenes < 
<mailto:ricardo.carde...@gmail.com> ricardo.carde...@gmail.com>:
Mire señor Alonso, yo no le he respondido a la ligera.
 
Primero, como le dije, el caso de Python no es una excepción, sino *la regla* 
en cuanto a lenguajes de programación *que implementan la exponenciación* en su 
sintaxis - es decir, la precedencia está dictada por el propio lenguaje. Es 
decir, no lo busque en C, o en C++, o en Java, etc. De hecho, me molesté en 
documentarme brevemente antes de responder. Y mira que no hay muchos lenguajes 
que implementen la exponenciación en su sintaxise, pero le dejo una lista (no 
exhaustiva), sin irme a casos demasiado exóticos:
 
  - ADA: los operadores de MAYOR precedencia son abs (valor absoluto), not 
(negación lógica) y ** (exponenciación). Dos niveles por encima de los 
operadores unarios, y uno por encima de la multiplicación/división.
  - D: El operador ^^ (exponenciación) está un nivel por encima de los unarios
  - FORTRAN: El operador ** tiene la precedencia más alta
  - Haskell: Los operadores ^, ^^ y ** (todos de exponenciación) están por 
debajo sólo de "!!", que se usa para acceder a los índices de arrays
  - PHP: ** está por encima de todos los demás operadores aritméticos (y mira 
que le tengo tirria a este lenguaje, pero por una vez...)
  - Python (pero esto ya lo sabíamos): ** está, como viene siendo habitual, por 
encima de los unarios, pero por debajo de los operadores de indización
  - R: ^ (exponenciación), está justo por encima de + y - unarios
  - Ruby: ** está justo por encima del - unario (pero justo por debajo del + 
unario, cosas de la vida)
 
Casos que conozco donde la precedencia de los unarios está por encima: Prolog, 
JavaScript y algunos casos patológicos como Excel (véase más abajo).
 
En cuanto a calculadoras, he usado la que tengo más a mano (en mi teléfono 
móvil) y:
 
   -4^2 = -16
   (-4)^2 = 16
 
tal como esperaba.
 
Y en el caso de las matemáticas, don Aurelio Baldor (al que no conocía, por 
cierto) podrá cantar misa en Latín, pero cualquier de mis profesores de 
matemáticas me hubiera tirado de las orejas si se ocurre interpretar que:
 
    -x^n = (-x)^n
 
Aunque claro, siempre me animaron a usar paréntesis para que no cupiera duda.
 
Si es cuestión de sacar referencias, pues nada. Citemos Wikipedia, que a su vez 
usa como referencias "Elementary Algebra for College Students" (Angel Allen) y 
"Taschebuch der Mathematik" (Grosche, Ziegler y Ziegler):
 
There exist differing conventions concerning the unary operator − (usually read 
"minus"). In written or printed mathematics, the expression −32 is interpreted 
to mean 0 − (32) = −9, but in some applications and programming languages, 
notably Microsoft Office Excel (and other spreadsheet applications) and the 
programming language bc [...]
 
Las negritas son mías, pero vamos, que la norma la que decimos nosotros, aunque 
algunos lenguajes de programación han escogido usar la convención contraria. Y 
Baldor, según vd., aunque la única copia a la que tenido acceso es una edición 
de 1985-86, en la que el capítulo XV no empieza hasta la página 155 y no 
aparece un sólo número negativo.
 
Saludos,
Ricardo
 
2016-12-24 6:52 GMT-10:00 Johnny Alonso < 
<mailto:johnny.alonso.quint...@gmail.com> johnny.alonso.quint...@gmail.com>:
Hola Ricardo y Armando, si las expresiones que muestran son código Python, 
lamento decirles que están bastante lejos de la realidad.
Están comparando expresiones con operadores diferentes y que el resultado en 
ocasiones les coincida es mera casualidad.
En Python el operador ** es potenciación y ^ equivale a la operación XOR entre 
bist.
>>> -2**2
-4
>>> -(2^2)
0
Armando ni siquiera coinciden los resultados, dándote el beneficio de la duda, 
y utilizas el ^ como operador de potenciación, entonces:
La expresión -(2^2) en Python equivale a:
>>> -(2**2)
-4
Aquí los resultados con el operador ** coinciden, -4 en ambos casos, y lo 
acepto como correcto desde el punto de vista del lenguaje, pero no desde el 
punto de vista matemático, pues matemáticamente las expresión -2² es diferente 
a -(2²).
Los desarrolladores de lenguajes son libres de incorporar lo que desean, esto 
también aplica para la precedencia de operadores y el sentido de evaluación de 
las expresiones matemáticas, pero de igual forma lo documentan para que los 
usuarios no incurramos en errores asumiendo que todos cumplen las reglas de 
evaluación matemática al pie de la letra.
 
Conjetura: Python no implementa el operador menos unario, pero si el binario el 
cual tiene menor precedencia que el de potenciación, así:
-x**n es interpretado en Python como 0-x**n.
>>> -2**2
-4
>>> 0 - 2**2
-4
 
Saludos, Johnny Alonso
 
 
De: Python-es [mailto: <mailto:python-es-bounces%2Bjohnny.alonso.quintero> 
python-es-bounces+johnny.alonso.quintero= <mailto:gmail....@python.org> 
gmail....@python.org] En nombre de Armando Ortega
Enviado el: sábado, 24 de diciembre de 2016 6:24 a. m.

Para: La lista de python en castellano
Asunto: Re: [Python-es] Python 3.5.2
 
Buenos días.

Ricardo tiene razón. 

-2**2 = -(2^2) = -4
(-2)**2 = -2^2 = 4

Un saludo.
El 24/12/16 a las 04:54, Johnny Alonso escribió:
Hola Ricardo, Por definición “La potencia es resultado de tomar un número como 
factor 2 o más veces”. Aritmética de Baldor, capítulo XV, Elevación a potencias 
y sus operaciones inversas, página 152.
 
-2**2 = -2 * -2 
 
Leyes de la potenciación:
Todo número elevado a la cero  es igual a 1, x**0 = 1
-2**0 = 1
 
Todo número elevado a un exponente par (múltiplo de 2) es positivo, en caso 
contrario se mantiene el signo del número.
-2**2 = 4
-2**3 = -8
 
Lo anterior lo puedes verificar en la calculadora de un celular IPhone o 
Samsung, incluso en la de Windows.
 
Es evidente que en Python es así, y lo acepto porque así está documentado, pero 
es algo para tener en cuenta cuando programas en él.
 
Ricardo, con respecto a las matemáticas en este caso, estas equivocado.
 
Saludos, Johnny Alonso
De: Python-es [ 
<mailto:python-es-bounces+johnny.alonso.quintero=gmail....@python.org> 
mailto:python-es-bounces+johnny.alonso.quintero=gmail....@python.org] En nombre 
de Ricardo Cárdenes
Enviado el: viernes, 23 de diciembre de 2016 5:04 p. m.
Para: La lista de python en castellano
Asunto: Re: [Python-es] Python 3.5.2
 
No, no es una excepción.
 
En matemáticas, la exponenciación tiene prioridad:
 
  -x^2 = -(x^2)
 
Los lenguajes de programación que implementan este operador, suelen adherirse a 
la regla (Python, PHP, D, Ruby, ...). Luego tienes disidentes como JavaScript, 
pero bueno...
 
Así que no, Python no es "una excepción a las reglas algebraicas".
 
Saludos,
Ricardo
 
2016-12-23 5:31 GMT-10:00 Johnny Alonso < 
<mailto:johnny.alonso.quint...@gmail.com> johnny.alonso.quint...@gmail.com>:
Gracias Kiko, me queda claro, es excepción a las reglas algebraicas en Python.
 
De: Python-es [mailto: <mailto:python-es-bounces%2Bjohnny.alonso.quintero> 
python-es-bounces+johnny.alonso.quintero= <mailto:gmail....@python.org> 
gmail....@python.org] En nombre de Kiko
Enviado el: viernes, 23 de diciembre de 2016 10:08 a. m.
Para: La lista de python en castellano
Asunto: Re: [Python-es] Python 3.5.2
 
 
 
El 23 de diciembre de 2016, 16:05, Kiko < <mailto:kikocorre...@gmail.com> 
kikocorre...@gmail.com> escribió:
 
 
El 23 de diciembre de 2016, 15:06, Johnny Alonso < 
<mailto:johnny.alonso.quint...@gmail.com> johnny.alonso.quint...@gmail.com> 
escribió:
Hola todos, estoy iniciándome en Python y creo que se presenta un fallo de 
precedencia con el operador menos unario:
>>> -2**2  # probable error
-4
>>> -2 * -2  # Ok
4
>>> pow(-2, 2)  # Ok
4
>>> 
Por favor, si alguien sabe si esto está documentado podría indicarme en donde 
lo encuentro, de lo contrario, podrían reportarlo a la fundación, yo no lo se 
hacer.
 
 
Se evalúa antes el operador potencia:  
<https://docs.python.org/3/reference/expressions.html#unary-arithmetic-and-bitwise-operations>
 
https://docs.python.org/3/reference/expressions.html#unary-arithmetic-and-bitwise-operations
Antes he ido muy rápido:  
<https://docs.python.org/3/reference/expressions.html#the-power-operator> 
https://docs.python.org/3/reference/expressions.html#the-power-operator
 
 
 
Saludos, JohnnyAlonso

_______________________________________________
Python-es mailing list
 <mailto:Python-es@python.org> Python-es@python.org
 <https://mail.python.org/mailman/listinfo/python-es> 
https://mail.python.org/mailman/listinfo/python-es
 
 

_______________________________________________
Python-es mailing list
 <mailto:Python-es@python.org> Python-es@python.org
 <https://mail.python.org/mailman/listinfo/python-es> 
https://mail.python.org/mailman/listinfo/python-es
 



_______________________________________________
Python-es mailing list
 <mailto:Python-es@python.org> Python-es@python.org
 <https://mail.python.org/mailman/listinfo/python-es> 
https://mail.python.org/mailman/listinfo/python-es
 

_______________________________________________
Python-es mailing list
 <mailto:Python-es@python.org> Python-es@python.org
 <https://mail.python.org/mailman/listinfo/python-es> 
https://mail.python.org/mailman/listinfo/python-es
 
 

_______________________________________________
Python-es mailing list
 <mailto:Python-es@python.org> Python-es@python.org
 <https://mail.python.org/mailman/listinfo/python-es> 
https://mail.python.org/mailman/listinfo/python-es
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a