#include #include "misc.h" #define BINS 100 /* STATSTRM -- compute statistics of an input stream vectors */ statstrm (input, hflag, cflag, tflag, aflag, sflag, rflag, n) char input[]; int *hflag, *cflag, *tflag, *aflag, *sflag, *rflag, *n; { int i, pts; float v, temp, vavg[BINS], vstd[BINS], vmin[BINS], vmax[BINS]; FILE *fd; if (strcmp (input, "STDIN") == 0) fd = getstdin; else if ((fd = fopen (input, "r")) == NULL) { printf ("STATSTRM: Can't read file %s\n", input); return; } pts = 0; for (i = 0; i < *n; i++) { vavg[i] = 0.; vstd[i] = 0.; vmin[i] = 1e31; vmax[i] = -1e31; } for (;;) { for (i = 0; i < *n; i++) { scanf ("%hf", &v); if (feof (fd)) break; vavg[i] += v; vstd[i] += v * v; if (v < vmin[i]) vmin[i] = v; if (v > vmax[i]) vmax[i] = v; } if (feof (fd)) break; pts++; } fclose (fd); if (*hflag) { if (*cflag) printf (" Count"); if (*tflag) printf (" Sum"); if (*aflag) printf (" Average"); if (*sflag) printf (" Std Dev"); if (*rflag) printf (" Minimum"); if (*rflag) printf (" Maximum"); printf ("\n"); } for (i = 0; i < *n; i++) { if (*cflag) printf (" %10d", pts); if (*tflag) printf (" %10g", vavg[i]); if (*aflag) printf (" %10g", vavg[i] / pts); if (*sflag) if (pts > 1) { temp = (pts * vstd[i] - vavg[i] * vavg[i]) / (pts * (pts - 1)); printf (" %10g", temp > 0. ? sqrt (temp) : 0.); } else printf (" %10g", 0.); if (*rflag) printf (" %10g %10g", vmin[i], vmax[i]); printf ("\n"); } }