/* p_dist.c -- demo: text graph of some probability distributions */ /* $Id$ */ /* Carlos Duarte, 980126/990314 */ /* cc p_dist.c -lm */ #include #include #include #include #include #include int N = 58; /* number of lines graph will take (x axis) */ int K = 222222; /* number of iters */ int *A; /* uniform distributed value, in [0,1) */ double u(void) { double t; t = rand(); t /= RAND_MAX+1.0; return t; } int uniform(void) { return (int)floor(u()*N); } int normal(void) { double y; int res; do { double y1 = -log(1-u()); double y2 = -log(1-u()); y = y1-1.0; y *= y; y /= 2; y = y2 - y; } while (y <= 0); y *= 3; res = (int)floor(y); if (u() > .5) res = -res; if (res < -N/2) res = -N/2; else if (res >= N/2) res = N/2-1; return res+N/2; } int expon(void) { int res; double y = -log(1-u()); y *= 9; res = floor(y); if (res >= N) res = N-1; return res; } void p(int n, int c) { while (n--) putchar(c); putchar('\n'); } void t(int (*f)(void)) { int max, k; for (k=0; k max) max = A[k]; } for (k=0; k