/*
    运算表达式主要在设计优先级上
    无括号的情况下设置四个优先级(从高到低为):(* /)、(+ -)、($)、(#)
    其中#放栈底,$放字符串结尾
    遇到数字压入数字栈,遇到符号,如果优先级>栈顶优先级则压入,如果优先级<栈顶优先级则弹出栈顶和两个运算符进行运算,结果压入数字栈
    注意:当运算符栈中只有#和$的时候,数组栈中只剩一个数字,那就是结果 
*/

#include<iostream>
#include<stack>
#include<string>
using namespace std;
int getleval(char op){
    if(op=='*'||op=='/'){
        return 2;
    }else if(op=='+'||op=='-'){
        return 1;
    }else if(op=='$'){
        return 0;
    }else return -1;
}
float compute(float x,float y,char op){
    if(op=='+'){
        return x+y;
    }else if(op=='-'){
        return x-y;
    }else if(op=='*'){
        return x*y;
    }else return x/y;
} 
int main(){
    string s;
    stack<char> op;
    stack<float> num;
    op.push('#');
    while(getline(cin,s)){
        if(s=="0")break;
        s+="$";
        float res=0;int i=0;
        while(i<s.size()){
            if(s[i]>='0'&&s[i]<='9'){
                res=0;
                while(s[i]>='0'&&s[i]<='9'){
                    res=res*10+s[i]-'0';
                    i++;
                }num.push(res);
            }else if(s[i]==' '){
                i++;
            }else{
                if(getleval(s[i])>getleval(op.top())){
                    op.push(s[i]);
                    i++;
                }else{
                    char o=op.top();
                    op.pop();
                    float num2=num.top();
                    num.pop();
                    float num1=num.top();
                    num.pop();
                    num1=compute(num1,num2,o);
                    num.push(num1);
                }
            }
        }printf("%.2f\n",num.top());
        num.pop();
        op.pop();
    }
    return 0;
}