#include <iostream>
#include <algorithm>
#include <iomanip>
#include <stack>
#include <string>
#include <map>
using namespace std;
int main(void)
{
map<char, int>Map;//定义+-*/执行顺序
Map.insert(make_pair('+', 1));
Map.insert(make_pair('-', 1));
Map.insert(make_pair('*', 2));
Map.insert(make_pair('/', 2));
stack<double>stad;
stack<char>stach;
int x;
string str;
double y, z;
while (getline(cin, str))
{
if (str == "0")
{
break;
}
while (!stad.empty())
{
stad.pop();
}
while (!stach.empty())
{
stach.pop();
}
x = 0;
for (string::size_type i = 0; i < str.size(); i++)
{
if(str[i] == ' ')
{
continue;
}
else if (str[i] >= '0' && str[i] <= '9')
{
if((i != str.size() - 1 && str[i+1] == ' ') || i == str.size() - 1)
{
x = x * 10 + str[i] - '0';
stad.push(x * 1.0);
x = 0;
}
else
{
x = x * 10 + str[i] - '0';
}
}
else
{
while (!stach.empty() && Map[str[i]] <= Map[stach.top()])
{
y = stad.top(); stad.pop();
z = stad.top(); stad.pop();
switch (stach.top())
{
case '+' :
stad.push(z + y);
break;
case '-' :
stad.push(z - y);
break;
case '*' :
stad.push(z * y);
break;
case '/' :
stad.push(z / y);
break;
default:
break;
}
stach.pop();
}
stach.push(str[i]);
}
}//for
/*while (!stad.empty())
{
cout << stad.top() << endl;
stad.pop();
}
while (!stach.empty())
{
cout << stach.top() << endl;
stach.pop();
}*/
while (!stach.empty())
{
y = stad.top(); stad.pop();
z = stad.top(); stad.pop();
switch (stach.top())
{
case '+' :
stad.push(z + y);
break;
case '-' :
stad.push(z - y);
break;
case '*' :
stad.push(z * y);
break;
case '/' :
stad.push(z / y);
break;
default:
break;
}
stach.pop();
}
//cout << stad.size() << endl;
cout << fixed << setprecision(2) << stad.top() << endl;
}
return 0;
}