Estoy escribiendo código para analizar cadenas de expresiones matemáticas y noté que el orden en que se evalúan los operadores de potencia encadenados en Python difiere del orden en Excel.
De http://docs.python.org/reference/expressions.html :
"Por lo tanto, en una secuencia sin potencia de operadores de potencia y unarios, los operadores se evalúan de derecha a izquierda (esto no restringe el orden de evaluación para los operandos): -1 * 2 da como resultado -1".
Esto significa que, en Python:
2**2**3
se evalúa como2**(2**3) = 2**8 = 256
En Excel, funciona al revés: 2^2^3
se evalúa como(2^2)^3 = 4^3 = 64
Ahora tengo que elegir una implementación para mi propio analizador. El orden de Excel es más fácil de implementar, ya que refleja el orden de evaluación de la multiplicación.
Le pregunté a algunas personas en la oficina qué sentían por la evaluación 2^2^3
y obtuve respuestas encontradas.
¿Alguien sabe de buenas razones o concideraciones a favor de la implementación de Python? Y si no tiene una respuesta, comente con el resultado que obtiene de la intuición, ¿ 64
o 256
?
Respuestas:
La razón por la cual, en matemática, los exponentes apilados se aplican de arriba hacia abajo es que de la otra manera solo obtienes multiplicación de exponentes:
fuente
Wikipedia (y mi profesor de matemáticas) me dice: los exponentes apilados se aplican de arriba hacia abajo.
Esto se refleja en la forma en que Python lo evalúa. Microsoft está equivocado (una vez más)
Y Ruby lo evalúa como Python, por lo que es correcto sin duda, ya que Matz no puede estar equivocado.
fuente