6 SYNTAX ERROR TO AVOID COMPILING THIS
- IT CAUSES INFINITE RECURSION
.
8 static unsigned long long MAX_ITEMS
= 10000;
11 cmpdouble (const void *p1
, const void *p2
)
13 double n1
= *((double *)p1
);
14 double n2
= *((double *)p2
);
26 compute_median (int n
, double vec
[])
28 qsort (vec
, n
, sizeof (double), cmpdouble
);
31 return ((vec
[n
/ 2] + vec
[n
/ 2 - 1]) / 2.0);
37 compute_stddev (int n
, double avg
, double vec
[])
42 for (x
= 0.0, sum
= 0.0, i
= 0; i
< n
; i
++)
59 main (int argc
, char *argv
[])
62 double x
, sum
, product
, inverse_sum
, arithmetic
, geometric
, harmonic
;
63 double min
, max
, median
, variance
, stddev
;
74 vec
= (double *) malloc (MAX_ITEMS
* sizeof (double));
78 ret
= scanf ("%lg", &x
);
93 inverse_sum
+= 1.0 / x
;
97 if (count
>= MAX_ITEMS
)
100 vec
= (double *) realloc (vec
, MAX_ITEMS
* sizeof (double));
104 int do_min
= (strstr (argv
[0], "min") != NULL
);
105 int do_max
= (strstr (argv
[0], "max") != NULL
);
106 int do_avg
= (strstr (argv
[0], "avg") != NULL
);
107 int do_geo
= (strstr (argv
[0], "geoavg") != NULL
);
108 int do_harmonic
= (strstr (argv
[0], "harmonic") != NULL
);
109 int do_median
= (strstr (argv
[0], "median") != NULL
);
110 int do_variance
= (strstr (argv
[0], "variance") != NULL
);
111 int do_stdev
= (strstr (argv
[0], "stdev") != NULL
);
112 int do_all
= (argc
> 1 && strcmp (argv
[1], "-a") == 0);
116 arithmetic
= sum
/ count
;
117 geometric
= pow (product
, (double) 1.0 / (double) count
);
118 harmonic
= count
/ inverse_sum
;
119 median
= compute_median (count
, vec
);
120 stddev
= compute_stddev (count
, arithmetic
, vec
);
121 variance
= stddev
* stddev
;
125 printf ("# of items read --> %d\n", count
);
126 printf ("Min --------------> %lg\n", min
);
127 printf ("Max --------------> %lg\n", max
);
128 printf ("Arithmetic mean --> %lg\n", arithmetic
);
129 printf ("Geometric mean ---> %lg\n", geometric
);
130 printf ("Harmonic mean ----> %lg\n", harmonic
);
131 printf ("Median -----------> %lg\n", median
);
132 printf ("Variance ---------> %lg\n", variance
);
133 printf ("Standard dev -----> %lg\n", stddev
);
136 printf ("%lg\n", min
);
138 printf ("%lg\n", max
);
140 printf ("%lg\n", arithmetic
);
142 printf ("%lg\n", geometric
);
143 else if (do_harmonic
)
144 printf ("%lg\n", harmonic
);
146 printf ("%lg\n", median
);
147 else if (do_variance
)
148 printf ("%lg\n", variance
);
150 printf ("%lg\n", stddev
);
153 fprintf (stderr
, "ERROR: Unknown value '%s' to compute\n", argv
[0]);
159 fprintf (stderr
, "ERROR: none of the input is positive\n");