Ya hablé de esto en algún otro artículo, pero la imagen que ilustra esta entrada habla precisamente del tema, en donde más de uno cree que en las reglas de las matemáticas se ha establecido la precedencia de las operaciones. Hay quien incluso indica que hace más de 100 años se pusieron estas reglas y citan un artículo: Discussions: Relating to the Order of Operations in Algebra, de N. J. Lennes, The American Mathematical Monthly, Vol. 24, No. 2 (Feb., 1917), pp. 93-95 (3 pages). Sin embargo, desde el título del mismo podemos ver que es una discusión sobre el orden de las operaciones en álgebra.
La realidad es que estas reglas de precedencia no se necesitan en matemáticas, porque para eso están los paréntesis. Por ejemplo, si pongo: ¿cuánto es 3a / 5b? Si a=5 y b=2, ¿harás primero 3(5), después 5(2) y tendrás 15/10? ¿O harás 3(5)/5(2) de acuerdo a esa convención de hace 100 años? Si es así, 3 * (5/5) * 2? Asumimos que si tenemos una expresión como 3a, haremos de inmediato la multiplicación cuando tengamos el valor de la variable "a", ¿verdad? Pero si escribimos 3 * 5 / 5 * 2 ya no parece tan claro, ¿o me equivoco? Sin embargo, si ponemos (3 * 5) / (5 * 2), sabremos en qué orden tenemos que hacer las operaciones. Vamos, a presencia de los paréntesis cambia la precedencia de las operaciones.
En cómputo, cuando aprendemos un lenguaje, nos indican la precedencia de los operadores para que así, si ponemos la expresión 3a / 5b, sin poner paréntesis, el lenguaje de programación particular que estemos estudiando, hará las operaciones de acuerdo a cómo se ha implementado la precedencia, es decir, qué operador se ejecuta primero, sobre todo cuando el programador no ha cambiado la precedencia usando paréntesis. Pero ojo, la precedencia que defina un lenguaje en particular es arbitraria. No tiene que seguir necesariamente ninguna regla matemática particular.
Por ello, en la imagen pueden verse dos calculadoras, la de la izquierda es una de las calculadoras Casio y a la derecha es un programa, una app de un teléfono que es una calculadora por software. ¿Por qué los resultados son distintos? Simple: porque cada sistema ha definido la precedencia de operadores de diferente manera. Por ejemplo, la calculadora Casio hace primero la expresión entre paréntesis (2+1) y entonces multiplica por 2 ese valor, lo que le da 6. dividido por 6 da 1. Mientras que la app divide 6 / 2 primero, que le da 3 y entonces hace la operación entre paréntesis y multiplica el resultado anterior, por lo que le da 9. ¿Quién está mal? Nadie. Todo depende de qué precedencia de operadores se use.
Pero entonces, ¿Cómo hacer para no tener dudas en el resultado de la máquina? Fácil: Por ejemplo, si queremos que el resultado dé 9 y no 1, póngase la expresión 6 / 2 (2 + 1) como (6 / 2) * (2 + 1) y listo. Véase cómo, al poner los paréntesis, le quitamos todo este asunto de la precedencia porque somos nosotros, los que hacemos la operación, que le decimos en qué orden ejecutarla.
3 comments:
Excelente exposición, cómo se menciona en el artículo cuando se trabaja en los lenguajes de programación están la jerarquía de operaddires las cuales son vitales a la hora de hacer calculos y evaluar fórmulas. Aunque el artículo no lo menciona, para procesar las expresiones y sus operadores se emplean técnicas de estructura de datos como son: la notación posfija, infija, prefija de estas la más ultilizada es la notación posfija. Lo anterior es relevante para la evluación de la expresion que se utiliza.
Hola Don Manuel, nada más paso a avísarle que parece que su cuenta de Twitter esta Hijacked / Hacked , por algún bot referente a Criptomonedas
Saludos, y espero que lo pueda resolver pronto
gracias, espero ya haber solucionado el problema. Activé la verificiación de dos pasos, cambié contraseña, borre la foto del que supuestamente me hackeó así como sus mensajes.
Post a Comment