#include <stdio.h>
#include <ctype.h>

#define STACK_SIZE 50
#define LINE_MAX 300
#define TOKEN_MAX 20

#define _Str(x) #x
#define Str(x) _Str(x)

float stack[STACK_SIZE];
float *sp = stack-1;
float *sp_max = &stack[STACK_SIZE-1];

#define full() (sp == sp_max)
#define empty() (sp == (stack-1))

void push(float value) {
  if(!full()) *(++sp) = value;
  else fprintf(stderr, "Stack overflow\n");
}

float pop() {
  if(!empty()) return *(sp--);
  fprintf(stderr, "Stack underflow\n");
  return 0;
}

float apply_operator(char op, float first, float second) {
  switch(op) {
  case '+': return first + second;
  case '-': return first - second;
  case '*': return first * second;
  case '/': return first / second;
  default: fprintf(stderr, "Bad operator: %c\n", op);
    return 0;
  }
}

char *next_token(char *linep) {
  while(isspace(*(linep++)));
  while(*linep && !isspace(*(linep++)));
  return linep;
}

int main() {
  for(;;) {
    float value;
    char line[LINE_MAX];
    char *linep;
    if(feof(stdin))
      return 0;
    fgets(line, LINE_MAX, stdin);
    linep = line;
    for(;;) {
      char token[TOKEN_MAX+1];
      if(!linep) break;
      if(sscanf(linep, "%" Str(TOKEN_MAX) "s", token) != 1)
        break;
      if(sscanf(token, "%f", &value)) push(value);
      else {
        float second = pop();
        float first = pop();
        push(apply_operator(token[0], first, second));
      }
      linep = next_token(linep);
    }
    if(!empty()) printf("%f\n", *sp);
  }
}

