J'écris du code pour analyser les chaînes d'expression mathématique et j'ai remarqué que l'ordre dans lequel les opérateurs de puissance chaînés sont évalués en Python diffère de l'ordre dans Excel.
Sur http://docs.python.org/reference/expressions.html :
"Ainsi, dans une séquence sans parenthèse de puissance et d'opérateurs unaires, les opérateurs sont évalués de droite à gauche (cela ne contraint pas l'ordre d'évaluation des opérandes): -1 * 2 donne -1." *
Cela signifie qu'en Python:
2**2**3
est évalué comme2**(2**3) = 2**8 = 256
Dans Excel, cela fonctionne dans l'autre sens: 2^2^3
est évalué comme(2^2)^3 = 4^3 = 64
Je dois maintenant choisir une implémentation pour mon propre analyseur. L'ordre Excel est plus facile à implémenter, car il reflète l'ordre d'évaluation de la multiplication.
J'ai demandé à certaines personnes dans le bureau ce que leur instinct ressentait pour l'évaluation 2^2^3
et j'ai obtenu des réponses mitigées.
Est-ce que quelqu'un connaît de bonnes raisons ou des discussions en faveur de l'implémentation de Python? Et si vous n'avez pas de réponse, veuillez commenter avec le résultat que vous obtenez de l'intestin - 64
ou 256
?
Réponses:
La raison pour laquelle en mathématiques les exposants empilés sont appliqués de haut en bas est que dans l'autre sens, vous obtenez simplement la multiplication des exposants:
la source
Wikipedia (et mon professeur de mathématiques) me dit: les exposants empilés sont appliqués de haut en bas.
Cela se reflète dans la façon dont Python l'évalue. Microsoft a tort (encore une fois)
Et Ruby l'évalue comme Python, donc c'est correct sans aucun doute, car Matz ne peut pas se tromper.
la source