/*

思路:
	使用两个栈,一个存储数,一个存储运算符
	再给运算符设置优先级,通过对优先级的判断,来实现运算控制
 */

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.HashMap;
import java.util.Stack;

public class Main {
	public static void main(String[] args) throws IOException {
		//优先级
		HashMap<Character, Integer> priority=new HashMap<Character, Integer>();
		priority.put('+', 0);
		priority.put('-', 0);
		priority.put('*', 1);
		priority.put('/', 1);
		priority.put('#', -1);
		Stack<Double> numStack=new Stack<>();
		Stack<Character> opStack=new Stack<>();
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		String line="";
		while(true) {
			line=reader.readLine();
			if(line==null||line.length()==1) {
				break;
			}
			//去除输入字符串中的空格
			line=line.replaceAll(" ","");
			//使用#作为for循环终止符号
			line=line+"#";
			//使用temple去提取数字
			String temple="";
			for(int i=0;i<line.length();i++) {
				char c=line.charAt(i);
				if(c>='0'&&c<='9') {
					temple=temple+c;
				}else {
					Double num=Double.valueOf(temple);
					numStack.push(num);
					temple="";
					//当前运算符优先级<=opStack栈顶运算符优先级时,不断弹栈,弹出所有>=当前运算符优先级的运算符
					//并将运算结果放回numStack中
					while(!opStack.isEmpty()&&priority.get(c)<=priority.get(opStack.peek())) {
							Double num1=numStack.pop();
							Double num2=numStack.pop();
							char op=opStack.pop();
							if(op=='+') {
								numStack.push(num2+num1);
							}
							if(op=='-') {
								numStack.push(num2-num1);
							}
							if(op=='/') {
								numStack.push(num2/num1);
							}
							if(op=='*') {
								numStack.push(num2*num1);
							}
					}
					if(c=='#') {
						break;
					}
					opStack.push(c);
				}
			}
			Double result=numStack.pop();
			System.out.printf("%.2f",result);
			System.out.println();
		}
	}
}