1
2
3
4
5
6
7
8
9
10
11#include <stdio.h>
12#include <stdlib.h>
13#include <math.h>
14#include <malloc.h>
15#include <sys/types.h>
16#include <sys/stat.h>
17
18void
19stats(FILE *fp)
20{
21 struct stat info;
22 double *x;
23 int limit;
24 int n=0, i;
25 double mu=0.0, sigma=0.0, sumsquare=0.0, sum=0.0, top=0.0, rho=0.0;
26 double sigma2=0.0;
27
28 fstat(fileno(fp), &info);
29 if (info.st_size > 0) {
30 limit = 2*info.st_size/sizeof(double);
31 } else {
32 limit = 10000;
33 }
34 x = (double *)malloc(limit*sizeof(double));
35
36 for (i=0; i<limit; ++i){
37 fscanf(fp, "%lf", &x[i]);
38 if (feof(fp))
39 break;
40 sumsquare += x[i]*x[i];
41 sum += x[i];
42 ++n;
43 }
44 mu = sum/(double)n;
45 sigma = sqrt((sumsquare - (double)n*mu*mu)/(double)(n-1));
46
47 for (i=1; i < n; ++i){
48 top += ((double)x[i]-mu)*((double)x[i-1]-mu);
49 sigma2 += ((double)x[i-1] - mu)*((double)x[i-1] - mu);
50
51 }
52 rho = top/sigma2;
53
54 printf("mu = %12.6f\n", mu);
55 printf("sigma = %12.6f\n", sigma);
56 printf("rho = %12.6f\n", rho);
57
58
59}
60
61
62int
63main(int argc, char **argv)
64{
65 FILE *fp;
66
67 if (argc > 1) {
68 fp = fopen(argv[1], "r");
69 if (!fp) {
70 perror(argv[1]);
71 exit(1);
72 }
73 } else {
74 fp = stdin;
75 }
76 stats(fp);
77 return 0;
78}
79