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