Piszę kod do analizy ciągów wyrażeń matematycznych i zauważyłem, że kolejność, w której operatory łańcuchowe są analizowane w Pythonie, różni się od kolejności w Excelu.
From http://docs.python.org/reference/expressions.html :
„Tak więc w niepodzielnej sekwencji mocy i jednoargumentowych operatorów, operatory są oceniane od prawej do lewej (nie ogranicza to kolejności oceny dla argumentów): -1 * 2 daje -1.” *
Oznacza to, że w Pythonie:
2**2**3
jest oceniane jako2**(2**3) = 2**8 = 256
W programie Excel działa odwrotnie: 2^2^3
jest oceniany jako(2^2)^3 = 4^3 = 64
Teraz muszę wybrać implementację dla własnego parsera. Kolejność programu Excel jest łatwiejsza do wdrożenia, ponieważ odzwierciedla kolejność oceny mnożenia.
Zapytałem kilka osób w biurze, jakie są ich odczucia w ocenie 2^2^3
i otrzymałem mieszane odpowiedzi.
Czy ktoś zna jakieś dobre powody lub konsekwencje na rzecz implementacji Pythona? A jeśli nie masz odpowiedzi, prosimy o komentarz z wynikiem, jaki otrzymujesz z jelit - 64
lub 256
?
Odpowiedzi:
Powodem, dla którego w matematyce są stosowane wykładniki wykładane z góry na dół, jest inny sposób uzyskania mnożenia wykładników:
źródło
Wikipedia (i mój nauczyciel matematyki) mówi mi: Stosy wykładników wykładane są od góry do dołu.
Odzwierciedla to sposób, w jaki Python ocenia to. Microsoft się myli (jeszcze raz)
Ruby ocenia to jako Python, więc jest to bez wątpienia poprawne, ponieważ Matz nie może się mylić.
źródło