Blame netem/stats.c

Packit Service 3880ab
/*
Packit Service 3880ab
 * Experimental data  distribution table generator
Packit Service 3880ab
 * Taken from the uncopyrighted NISTnet code (public domain).
Packit Service 3880ab
 *
Packit Service 3880ab
 * Rread in a series of "random" data values, either
Packit Service 3880ab
 * experimentally or generated from some probability distribution.
Packit Service 3880ab
 * From this, report statistics.
Packit Service 3880ab
 */
Packit Service 3880ab
Packit Service 3880ab
#include <stdio.h>
Packit Service 3880ab
#include <stdlib.h>
Packit Service 3880ab
#include <math.h>
Packit Service 3880ab
#include <malloc.h>
Packit Service 3880ab
#include <sys/types.h>
Packit Service 3880ab
#include <sys/stat.h>
Packit Service 3880ab
Packit Service 3880ab
void
Packit Service 3880ab
stats(FILE *fp)
Packit Service 3880ab
{
Packit Service 3880ab
	struct stat info;
Packit Service 3880ab
	double *x;
Packit Service 3880ab
	int limit;
Packit Service 3880ab
	int n=0, i;
Packit Service 3880ab
	double mu=0.0, sigma=0.0, sumsquare=0.0, sum=0.0, top=0.0, rho=0.0;
Packit Service 3880ab
	double sigma2=0.0;
Packit Service 3880ab
Packit Service 3880ab
	fstat(fileno(fp), &info;;
Packit Service 3880ab
	if (info.st_size > 0) {
Packit Service 3880ab
		limit = 2*info.st_size/sizeof(double);	/* @@ approximate */
Packit Service 3880ab
	} else {
Packit Service 3880ab
		limit = 10000;
Packit Service 3880ab
	}
Packit Service 3880ab
	x = (double *)malloc(limit*sizeof(double));
Packit Service 3880ab
Packit Service 3880ab
	for (i=0; i
Packit Service 3880ab
		fscanf(fp, "%lf", &x[i]);
Packit Service 3880ab
		if (feof(fp))
Packit Service 3880ab
			break;
Packit Service 3880ab
		sumsquare += x[i]*x[i];
Packit Service 3880ab
		sum += x[i];
Packit Service 3880ab
		++n;
Packit Service 3880ab
	}
Packit Service 3880ab
	mu = sum/(double)n;
Packit Service 3880ab
	sigma = sqrt((sumsquare - (double)n*mu*mu)/(double)(n-1));
Packit Service 3880ab
Packit Service 3880ab
	for (i=1; i < n; ++i){
Packit Service 3880ab
		top += ((double)x[i]-mu)*((double)x[i-1]-mu);
Packit Service 3880ab
		sigma2 += ((double)x[i-1] - mu)*((double)x[i-1] - mu);
Packit Service 3880ab
Packit Service 3880ab
	}
Packit Service 3880ab
	rho = top/sigma2;
Packit Service 3880ab
Packit Service 3880ab
	printf("mu =    %12.6f\n", mu);
Packit Service 3880ab
	printf("sigma = %12.6f\n", sigma);
Packit Service 3880ab
	printf("rho =   %12.6f\n", rho);
Packit Service 3880ab
	/*printf("sigma2 = %10.4f\n", sqrt(sigma2/(double)(n-1)));*/
Packit Service 3880ab
	/*printf("correlation rho = %10.6f\n", top/((double)(n-1)*sigma*sigma));*/
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
Packit Service 3880ab
int
Packit Service 3880ab
main(int argc, char **argv)
Packit Service 3880ab
{
Packit Service 3880ab
	FILE *fp;
Packit Service 3880ab
Packit Service 3880ab
	if (argc > 1) {
Packit Service 3880ab
		fp = fopen(argv[1], "r");
Packit Service 3880ab
		if (!fp) {
Packit Service 3880ab
			perror(argv[1]);
Packit Service 3880ab
			exit(1);
Packit Service 3880ab
		}
Packit Service 3880ab
	} else {
Packit Service 3880ab
		fp = stdin;
Packit Service 3880ab
	}
Packit Service 3880ab
	stats(fp);
Packit Service 3880ab
	return 0;
Packit Service 3880ab
}