Fix build break in 64bit architectures
[platform/upstream/iproute2.git] / netem / stats.c
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 }