#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>


/* This program simulates a B/B/1 queue: 
U(t+1) = max[U(t) - S(t), 0] + A(t) */

main(int argc, char *argv[]){

  int Numits, U, t;
  long U_sum;
  double lambda, mu, exact, X, U_av;

  if (argc < 4) {
    printf("\nUsage: ./a.out lambda mu Numits\n");
    exit(0);
  }  
  
  lambda = (float) atof(argv[1]);
  mu = (float) atof(argv[2]);
  Numits = (int) atoi(argv[3]);

  printf("\n lambda = %f, mu = %f, Numits = %d", lambda, mu, Numits);
  
  U=0;
  U_av=0.0;
  U_sum = 0;
  
  for (t=0; t< Numits; t++) {
    /* tally averages */
    U_sum += U; 
   
    /*serve data*/
    if (U > 0) {
    X = rand()*1.0/RAND_MAX;
      if (X < mu) 
        U = U - 1;
    } 
   
    /* get arrivals */
    X = rand()*1.0/RAND_MAX;
    if (X < lambda)
      U = U + 1;
  }
  
  exact = (lambda)*(1.0 - lambda)/(mu - lambda);
  U_av = U_sum/(1.0*Numits);
  
  printf("\n U_av  = %f", U_av);
  printf("\n exact = %f", exact); 
  printf("\n U(%d) = %d", Numits - 1, U);
  printf("\n U/Numits = %f", U*1.0/Numits);
  
  printf("\n\n");
  return 0;
}

