数式文字列を解析するコードを書いていますが、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
?
実装はそれほど難しくありません。とにかく、パーサーは、割り当てなどのために、何らかの方法で正しい結合性をサポートする必要があります。
—
marco-fiset 2012年
そうではありません。実際に実装しました。ただし、ライブラリの主な用途の1つは数式をExcelにエクスポートすることであるため、Excelの規則に戻しました。そのため、数式がExcelで機能する方法に固執する方が理にかなっています。
—
PieterMüller12年