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