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 <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:python-es-bounces+johnny.alonso.quintero=gmail.
> c...@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.
> c...@python.org
> <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 <johnny.alonso.quint...@gmail.com
> >:
>
> Gracias Kiko, me queda claro, es excepción a las reglas algebraicas en
> Python.
>
>
>
> *De:* Python-es [mailto:python-es-bounces+johnny.alonso.quintero=gmail.
> c...@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 <kikocorre...@gmail.com> escribió:
>
>
>
>
>
> El 23 de diciembre de 2016, 15:06, Johnny Alonso <
> 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
>
> Antes he ido muy rápido: https://docs.python.org/3/
> reference/expressions.html#the-power-operator
>
>
>
>
>
>
> Saludos, JohnnyAlonso
>
>
> _______________________________________________
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>
>
>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>
>
>
>
>
> _______________________________________________
>
> Python-es mailing list
>
> Python-es@python.org
>
> https://mail.python.org/mailman/listinfo/python-es
>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es@python.org
> 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