#include <bits/stdc++.h>
#include <cstddef>
#include <cstdio>
#include <stack>
#include <string>
using namespace std;
int main() {
char buf[1001];
while (fgets(buf, 1001, stdin) != NULL) {
string expr = buf;
expr.pop_back();
map<char, int> pirority{
{'$', 0},
{'+', 1}, {'-', 1},
{'*', 2}, {'/', 2},
};
//去除换行符号
/* 整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
输入:
1 + 2
4 + 2 * 5 - 7 / 11
0
输出:
3.00
13.36
*/
if (expr == "0") break;
expr.push_back('$');//补充一个虚拟的终止符号
string num;//数字
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] == ' ') {
if (num != " ") {
numstack.push(stod(num));//stod():string->double
num = " ";
}
} else {
if (expr[i] == '$') {
if (num != " ") {
numstack.push(stod(num));
num = " ";
}
}
while (!operstack.empty() && pirority[operstack.top()] >= pirority[expr[i]]) {
char oper = operstack.top();
operstack.pop();
double right = numstack.top();
numstack.pop();
double left = numstack.top();
numstack.pop();
switch (oper) {
case '+':
numstack.push(right + left);
break;
case '-':
numstack.push(left - right);
break;
case '*':
numstack.push(right * left);
break;
case '/':
numstack.push(left /right );
break;
}
}
operstack.push(expr[i]);
}
}
printf("%.2lf\n",numstack.top());
}
}
// 64 位输出请用 printf("%lld")