|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 3178 (0xc6a) Types: TextFile Names: »stats.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Rog-O-Matic/stats.c«
/* * stats.c: Rog-O-Matic XIV (CMU) Fri Dec 28 23:28:59 1984 - mlm * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin * * A package for maintaining probabilities and statistics. * * Functions: * * A probability is a simple count of Bernoulli trials. * * clearprob: Clear a probability. * addprob: Add success/failure to a probability. * prob: Calculate p(success) of a statistic. * parseprob: Parse a probability from a string. * writeprob: Write a probability to a file. * * A statistic is a random variable with a mean and stdev. * * clearstat: Clear a statistic. * addstat: Add a data point to a statistic. * mean: Calculate the mean of a statistic. * stdev: Calculate the std. dev. of a statistic. * parsestat: Parse a statistic from a string. * writestat: Write a statistic to a file. */ # include <stdio.h> # include <math.h> # include "types.h" /* * clearprob: zero a probability structure. */ clearprob (p) register probability *p; { p->fail = p->win = 0; } /* * addprob: Add a data point to a probability */ addprob (p, success) register probability *p; register int success; { if (success) p->win++; else p->fail++; } /* * prob: Calculate a probability */ double prob (p) register probability *p; { register int trials = p->fail + p->win; if (trials < 1) return (0.0); else return ((double) p->win / trials); } /* * parseprob: Parse a probability structure from buffer 'buf' */ parseprob (buf, p) register char *buf; register probability *p; { p->win = p->fail = 0; sscanf (buf, "%d %d", &p->fail, &p->win); } /* * writeprob. Write the value of a probability structure to file 'f'. */ writeprob (f, p) register FILE *f; register probability *p; { fprintf (f, "%d %d", p->fail, p->win); } /* * clearstat: zero a statistic structure. */ clearstat (s) register statistic * s; { s->count = 0; s->sum = s->sumsq = s->low = s->high = 0.0; } /* * addstat: Add a data point to a statistic */ addstat (s, datum) register statistic *s; register int datum; { double d = (double) datum; s->count++; s->sum += d; s->sumsq += d*d; if (s->count < 2) s->low = s->high = d; else if (d < s->low) s->low = d; else if (d > s->high) s->high = d; } /* * mean: Return the mean of a statistic */ double mean (s) register statistic *s; { if (s->count < 1) return (0.0); else return (s->sum / s->count); } /* * stdev: Return the standard deviation of a statistic */ double stdev (s) register statistic *s; { register n = s->count; if (n < 2) return (0.0); else return (sqrt ((n * s->sumsq - s->sum * s->sum) / (n * (n-1)))); } /* * parsestat: Parse a statistic structure from buffer 'buf' */ parsestat (buf, s) register char *buf; register statistic *s; { s->count = 0; s->sum = s->sumsq = s->low = s->high = 0.0; sscanf (buf, "%d %lf %lf %lf %lf", &s->count, &s->sum, &s->sumsq, &s->low, &s->high); } /* * writestat. Write the value of a statistic structure to file 'f'. */ writestat (f, s) register FILE *f; register statistic *s; { fprintf (f, "%d %lg %lg %lg %lg", s->count, s->sum, s->sumsq, s->low, s->high); }