#include<stdlib.h>
#include<gsl/gsl_randist.h>


int main(int argc, char* argv[]){
  int i, sum_poi = 0, sum_exp = 0, val_poi, val_exp;
  int max_poi, max_exp = 0;
  int min_poi, min_exp = 100;
  float avg_poi, avg_exp = 0;
  int num = atoi(argv[1]);
  float seed = atoi(argv[2]);

  const gsl_rng_type * T = gsl_rng_mt19937;

  gsl_rng *r_poi;
  gsl_rng *r_exp;
  r_poi = gsl_rng_alloc (T);
  r_exp = gsl_rng_alloc (T);
  gsl_rng_set(r_exp, 0); 
  gsl_rng_set(r_poi, 0); 

  for(i=0;i<num;i++){

    val_poi = (int)gsl_ran_poisson(r_poi, seed);
    val_poi = ((((val_poi % 10) <= 5)?0:1)+(val_poi/10))*10;
    sum_poi+=val_poi;

    val_exp = (int)gsl_ran_exponential(r_exp, seed);
    val_exp = ((((val_exp % 10) <= 5)?0:1)+(val_exp/10))*10;
    sum_exp+=val_exp;

    if(val_poi>max_poi) max_poi=val_poi;
    if(val_poi<min_poi) min_poi=val_poi;

    if(val_exp>max_exp) max_exp=val_exp;
    if(val_exp<min_exp) min_exp=val_exp;
    printf("Poisson random num = [%d] Exponential random number  [%d]\n", val_poi, val_exp);
  }

  avg_poi = sum_poi / num;
  avg_exp = sum_exp / num;
  printf("\n\nmax_poi = [%d], min_poi = [%d] avg_poi = [%f]\n", max_poi, min_poi, avg_poi);
  printf("max_exp = [%d], min_exp = [%d] avg_exp = [%f]\n", max_exp, min_exp, avg_exp);
}

