Я пишу код для разбора строк математических выражений и заметил, что порядок, в котором цепочечные операторы вычисляются в Python, отличается от порядка в Excel.
С http://docs.python.org/reference/expressions.html :
«Таким образом, в непереносимой последовательности степенных и унарных операторов операторы оцениваются справа налево (это не ограничивает порядок вычисления для операндов): -1 * 2 приводит к -1». *
Это означает, что в Python:
2**2**3
оценивается как2**(2**3) = 2**8 = 256
В Excel это работает наоборот: 2^2^3
оценивается как(2^2)^3 = 4^3 = 64
Теперь мне нужно выбрать реализацию для моего собственного парсера. Порядок Excel проще реализовать, поскольку он отражает порядок вычисления умножения.
Я спросил у некоторых людей в офисе, каково их внутреннее чувство для оценки, 2^2^3
и получил смешанные ответы.
Кто-нибудь знает какие-либо веские причины или выводы в пользу реализации Python? И если у вас нет ответа, пожалуйста, прокомментируйте результат, который вы получаете от интуиции - 64
или 256
?
Ответы:
Причина, по которой в математике составные показатели применяются сверху вниз, заключается в том, что другой способ просто получить умножение показателей:
источник
Википедия (и мой учитель математики) говорит мне: составленные экспоненты применяются сверху вниз.
Это отражено в том, как Python оценивает его. Microsoft ошибается (еще раз)
А Ruby оценивает его как Python, так что это, без сомнения, правильно, поскольку Мац не может ошибаться.
источник