Estou escrevendo código para analisar cadeias de expressão matemática e notei que a ordem na qual os operadores de energia encadeados são avaliados no Python difere da ordem no Excel.
Em http://docs.python.org/reference/expressions.html :
"Assim, em uma sequência não-parênteses de poder e operadores unários, os operadores são avaliados da direita para a esquerda (isso não restringe a ordem de avaliação dos operandos): -1 * 2 resulta em -1." *
Isso significa que, em Python:
2**2**3
é avaliado como2**(2**3) = 2**8 = 256
No Excel, funciona o contrário: 2^2^3
é avaliado como(2^2)^3 = 4^3 = 64
Agora tenho que escolher uma implementação para meu próprio analisador. A ordem do Excel é mais fácil de implementar, pois reflete a ordem de avaliação da multiplicação.
Perguntei a algumas pessoas em todo o escritório qual era a sensação delas na avaliação 2^2^3
e obtive respostas contraditórias.
Alguém sabe de boas razões ou considerações a favor da implementação do Python? E se você não tem uma resposta, por favor, comente com o resultado que você começa a partir de intuição - 64
ou 256
?
Respostas:
A razão pela qual em matemática os expoentes empilhados se aplica de cima para baixo é que, da outra maneira, você apenas obtém a multiplicação de expoentes:
fonte
A Wikipedia (e meu professor de matemática) me diz: Os expoentes empilhados são aplicados de cima para baixo.
Isso se reflete na maneira como o Python o avalia. Microsoft está errado (mais uma vez)
E Ruby avalia como Python, por isso está correto sem dúvida, já que Matz não pode estar errado.
fonte