#include <iostream>
#include<string>
#include <map>
#include<stack>
using namespace std;
void calculate(stack<string> &stack1,stack<char> &stack2){
double a=stod(stack1.top());
stack1.pop();
double b=stod(stack1.top());
stack1.pop();
char x=stack2.top();
stack2.pop();
switch (x) {
case '+':
stack1.push(to_string(a+b));
break;
case '-':
stack1.push(to_string(b-a));
break;
case '*':
stack1.push(to_string(a*b));
break;
case '/':
stack1.push(to_string(b/a));
break;
default:
break;
}
}
void clear_str(string &s){
for(int i =0;i<s.size();i++){
if(s[i] == ' '){
s.erase(s.begin()+i);
}
}
}
int main(){
map<char,int> map1{{'+',1},{'-',1},{'*',2},{'/',2}};
string s;
while(getline(cin,s)){
if(s == "0") break;
clear_str(s);
string temp;
temp="";
stack<string> stack1;
stack<char> stack2;
for(int i=0;i<s.size();i++){
if(s[i] >= '0' && s[i] <= '9'){
temp+=s[i];
if(i==s.size() -1){
stack1.push(temp);
}
continue;
}
else{
stack1.push(temp);
temp="";
if(stack2.empty()){
stack2.push(s[i]);
}
else{
if(map1[s[i]] <= map1[stack2.top()]){
while(!stack2.empty() && (map1[stack2.top()] >= map1[s[i]])) {
calculate(stack1, stack2);
}
stack2.push(s[i]);
}
else{
stack2.push(s[i]);
}
}
}
}
while(!stack2.empty()) calculate(stack1,stack2);
printf("%0.2f\n",stod(stack1.top()));
stack1.pop();
}
return 0;
}