逆ポーランド記法に関して
お世話になります。
プログラムの初心者で、電卓を作ろうという気持ちから、この逆ポーランド記法に
たどり着きました。
各サイト様の情報を調べてみて、何とか動くところまで組めたのですが、最後の最後で
釈然としないところがあります。
通常の記述、『5 / 14 * 2 + 3』という式を処理させてみたのですが、逆ポーランドでは
『5,14,2,*,/,3,+』になってしまいます。(3.17857...)
式の流れだと、まず14と2をかけて、その数で5を割る…といった流れのようですが、
普通は『5,14,/,2,*,3,+』、5を14で割ってから、2かけるだと思います。
Excelでも、通常の式を入力すると、正しい値(3.714286)が出てきますが、
ソースで書き出すと上記の式になってしまいます。
トークン、及びスタックの先頭がともに*や/だった時に起こるのですが、これはこのままで
良いのでしょうか。計算する側が間違っているのでしょうか。
計算ルーチンは、以下の通りです(C#)
public decimal calc(string[] values)
{
Stack<decimal> stValue = new Stack<decimal>();
decimal d = 0;
foreach(string s in values)
{
if(decimal.TryParse(s,out d))
{
stValue.Push(d);
}
else
{
decimal d1 = stValue.Pop();
decimal d2 = stValue.Pop();
switch(s)
{
case "+":
d2 += d1;
break;
case "-":
d2 -= d1;
break;
case "*":
d2 *= d1;
break;
case "/":
d2 /= d1;
break;
}
stValue.Push(d2);
}
}
return stValue.Pop();
}
================================================
記述変換側、もしくは計算側、どちらを修正するべきなのでしょうか。
よろしくお願いいたします。