/* Last edited on 2007-08-15 21:26:55 by stolfi */ #include #include #include int main(int argc, char **argv) { double Mhi = 8.0; /* 2^3 */ double Mmd = 1024.0 * 1024.0 * 1024.0 * 1024.0 * 32.0; /* 2^45 */ double Mlo = 1024.0 * 1024.0 * 1024.0 * 1024.0 * 256.0; /* 2^48 */ int i; int clo[8]; /* Histogram of bits {0..2} (from low end). */ int cmd[8]; /* Histogram of bits {3..5}. */ int chi[8]; /* Histogram of bits {49..51}. */ /* Clear histograms: */ int k; for (k = 0; k < 8; k++) { clo[k] = cmd[k] = chi[k] = 0; } /* Collect histograms: */ for (i=0; i < 8000000; i++) { double x = drand48(); int hi = (int)(floor(x*Mhi)) % 8; int md = (int)(floor(x*Mmd)) % 8; int lo = (int)(floor(x*Mlo)) % 8; if (i < 100) { printf("%02d %02d %02d\n", hi, md, lo); } clo[lo]++; cmd[md]++; chi[hi]++; } /* Print histograms: */ for (k = 0; k < 8; k++) { printf("%02d %8d %8d %8d\n", k, chi[k], cmd[k], clo[k]); } return 0; }