#include<stack>
#include<string>
#include<cstdio>
#include<map>
using namespace std;
int main(){
char buf[300]={'\0'};
map<char,int> priority;//优先级用map进行管理
priority.insert(pair<char,int>('$',0));
priority.insert(pair<char,int>('+',1));
priority.insert(pair<char,int>('-',1));
priority.insert(pair<char,int>('*',2));
priority.insert(pair<char,int>('/',2));
while(fgets(buf,300,stdin) != NULL){
string expr = buf;
expr.pop_back();
if(expr == "0"){
break;
}
expr.push_back('$');//补充一个虚拟的终止符
string num;//用来收集单独的0-9以组成一个数字1 2 3 4 --> 1234
stack<double>numstack;
stack<char> operstack;
for(unsigned i = 0; i < expr.size(); ++i){
if(expr[i] >= '0' && expr[i] <= '9'){
num.push_back(expr[i]);
}
else if(expr[i] == ' '){//number有内容才生成数字
if(num != ""){
numstack.push(stod(num));//string to double
num ="";
}
}
else{
//得到的字符是+ - * / $
if(expr[i] == '$'){//把最后的数字字符变成数字
if(num != ""){
numstack.push(stod(num));
num = "";
}
}
while(!operstack.empty() && priority[operstack.top()] >= priority[expr[i]]){
//新来的运算符的优先级不高于栈顶运算符的优先级
char oper = operstack.top();//弹出原来的运算符
operstack.pop();
double rhs = numstack.top();
numstack.pop();
double lhs = numstack.top();
numstack.pop();
switch(oper){
case'+':
numstack.push(lhs + rhs);
break;
case'-':
numstack.push(lhs - rhs);
break;
case'*':
numstack.push(lhs * rhs);
break;
case'/':
numstack.push(lhs / rhs);
break;
}
}
//使得优先级比expr[i]更高都运算符全都计算过了
operstack.push(expr[i]);
}
}
printf("%.2lf\n",numstack.top());
}
}