Ich schreibe Code, um Zeichenfolgen für mathematische Ausdrücke zu analysieren, und habe festgestellt, dass die Reihenfolge, in der verkettete Potenzoperatoren in Python ausgewertet werden, von der Reihenfolge in Excel abweicht.
Von http://docs.python.org/reference/expressions.html :
"Somit werden in einer nicht parästhesierten Folge von Potenz- und unären Operatoren die Operatoren von rechts nach links ausgewertet (dies schränkt die Auswertungsreihenfolge für die Operanden nicht ein): -1 * 2 ergibt -1." *
Dies bedeutet, dass in Python:
2**2**3
als ausgewertet wird2**(2**3) = 2**8 = 256
In Excel funktioniert es umgekehrt: 2^2^3
wird als ausgewertet(2^2)^3 = 4^3 = 64
Ich muss jetzt eine Implementierung für meinen eigenen Parser auswählen. Die Excel-Reihenfolge ist einfacher zu implementieren, da sie die Bewertungsreihenfolge der Multiplikation widerspiegelt.
Ich fragte einige Leute im Büro, wie sie sich für die Bewertung fühlten, 2^2^3
und bekam gemischte Antworten.
Kennt jemand gute Gründe oder Überlegungen für die Python-Implementierung? Und wenn Sie keine Antwort haben, kommentieren Sie bitte das Ergebnis, das Sie aus dem Bauchgefühl erhalten - 64
oder 256
?
Antworten:
Der Grund, warum in der Mathematik gestapelte Exponenten von oben nach unten angewendet werden, ist, dass Sie auf die andere Weise nur die Multiplikation von Exponenten erhalten:
quelle
Wikipedia (und mein Mathematiklehrer) sagen mir: Gestapelte Exponenten werden von oben nach unten angewendet.
Dies spiegelt sich in der Art und Weise wider, wie Python es bewertet. Microsoft ist falsch (noch einmal)
Und Ruby bewertet es als Python, also ist es ohne Zweifel richtig, da Matz nicht falsch liegen kann.
quelle