// Calculate sample standard deviation using a histogram to see if // that makes it faster. // Answer: it doesn't. #include #include int main() { int hist[256] = {0}, n = 0, sum = 0, sumsq = 0, c; while ((c = getchar()) != EOF) hist[(unsigned char)c]++; for (int ii = 0; ii < 256; ii++) { n += hist[ii]; sum += ii * hist[ii]; sumsq += ii * ii * hist[ii]; } printf("Sample SD on %d bytes averaging %.3f is %.3f\n", n, sum/(double)n, sqrt(sumsq - (double)sum*sum/n)/(n-1)); return 0; }