Home | History | Annotate | Download | only in netem
      1 /*
      2  * Experimental data  distribution table generator
      3  * Taken from the uncopyrighted NISTnet code (public domain).
      4  *
      5  * Rread in a series of "random" data values, either
      6  * experimentally or generated from some probability distribution.
      7  * From this, report statistics.
      8  */
      9 
     10 #include <stdio.h>
     11 #include <stdlib.h>
     12 #include <math.h>
     13 #include <malloc.h>
     14 #include <sys/types.h>
     15 #include <sys/stat.h>
     16 
     17 void
     18 stats(FILE *fp)
     19 {
     20 	struct stat info;
     21 	double *x;
     22 	int limit;
     23 	int n=0, i;
     24 	double mu=0.0, sigma=0.0, sumsquare=0.0, sum=0.0, top=0.0, rho=0.0;
     25 	double sigma2=0.0;
     26 
     27 	fstat(fileno(fp), &info);
     28 	if (info.st_size > 0) {
     29 		limit = 2*info.st_size/sizeof(double);	/* @@ approximate */
     30 	} else {
     31 		limit = 10000;
     32 	}
     33 	x = (double *)malloc(limit*sizeof(double));
     34 
     35 	for (i=0; i<limit; ++i){
     36 		fscanf(fp, "%lf", &x[i]);
     37 		if (feof(fp))
     38 			break;
     39 		sumsquare += x[i]*x[i];
     40 		sum += x[i];
     41 		++n;
     42 	}
     43 	mu = sum/(double)n;
     44 	sigma = sqrt((sumsquare - (double)n*mu*mu)/(double)(n-1));
     45 
     46 	for (i=1; i < n; ++i){
     47 		top += ((double)x[i]-mu)*((double)x[i-1]-mu);
     48 		sigma2 += ((double)x[i-1] - mu)*((double)x[i-1] - mu);
     49 
     50 	}
     51 	rho = top/sigma2;
     52 
     53 	printf("mu =    %12.6f\n", mu);
     54 	printf("sigma = %12.6f\n", sigma);
     55 	printf("rho =   %12.6f\n", rho);
     56 	/*printf("sigma2 = %10.4f\n", sqrt(sigma2/(double)(n-1)));*/
     57 	/*printf("correlation rho = %10.6f\n", top/((double)(n-1)*sigma*sigma));*/
     58 }
     59 
     60 
     61 int
     62 main(int argc, char **argv)
     63 {
     64 	FILE *fp;
     65 
     66 	if (argc > 1) {
     67 		fp = fopen(argv[1], "r");
     68 		if (!fp) {
     69 			perror(argv[1]);
     70 			exit(1);
     71 		}
     72 	} else {
     73 		fp = stdin;
     74 	}
     75 	stats(fp);
     76 	return 0;
     77 }
     78