#include<cstdio>
#include<string>
#include<map>
#include<stack>
using namespace std;
int main() {
char arr[300];
map<char, int> priority = {//记录输入的优先级
{'$', 0},
{'+', 1},
{'-', 1},
{'*', 2},
{'/', 2},
};
while (fgets(arr, sizeof(arr), stdin) != NULL) {
string ear = arr;
ear.pop_back();
if (ear == "0") {
break;
}
ear.push_back('$');//给表达式末尾加上$
stack<double> numStack;
stack<char> opearStack;
string nums;
for (int i = 0; i < ear.size(); ++i) {//开始遍历表达式
if (ear[i] >= '0' && ear[i] <= '9') {
nums.push_back(ear[i]);//把数字压入数字栈
} else if (ear[i] == ' ') {
if (nums != " ") {
numStack.push(stod(nums));
nums = " ";
}
} else {
if (ear[i] == '$') {
if (nums != " ") {
numStack.push(stod(nums));
nums = " ";
}
}
while (!opearStack.empty() && priority[ear[i]] <= priority[opearStack.top()]) {
char oper = opearStack.top();//操作符
opearStack.pop();
double rhs = numStack.top();//运算数1
numStack.pop();
double lhs = numStack.top();//运算数2
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;
}
}
opearStack.push(ear[i]);
}
}
printf("%.2lf\n", numStack.top());
}
}