/** * Program to produce sequence of random numbers and compare two ways of * mapping them to a small range. */ #include #include /* has rand(), srand(), RAND_MAX */ int main(void) { int seed; int num_samples; int num_bins; printf("seed?\n"); if (scanf("%d", &seed) != 1) { printf("invalid input\n"); return EXIT_FAILURE; } if (seed <= 0) { printf("invalid input\n"); return EXIT_FAILURE; } printf("how many samples?\n"); if (scanf("%d", &num_samples) != 1) { printf("invalid input\n"); return EXIT_FAILURE; } if (num_samples <= 0) { printf("invalid input\n"); return EXIT_FAILURE; } printf("how many bins?\n"); if (scanf("%d", &num_bins) != 1) { printf("invalid input\n"); return EXIT_FAILURE; } if (num_bins <= 0) { printf("invalid input\n"); return EXIT_FAILURE; } srand(seed); int rbins[num_bins]; int qbins[num_bins]; for (int i = 0; i < num_bins; ++i) { rbins[i] = 0; qbins[i] = 0; } for (int i = 0; i < num_samples; ++i) { int n = rand(); int remainder = n % num_bins; int rounded_quotient = (int) ((((double) num_bins) * n)/(RAND_MAX+1.0)); rbins[remainder] += 1; qbins[rounded_quotient] += 1; } printf("counts using remainder method:\n"); for (int i = 0; i < num_bins; ++i) { printf("(%d) %d\n", i, rbins[i]); } printf("counts using quotient method:\n"); for (int i = 0; i < num_bins; ++i) { printf("(%d) %d\n", i, qbins[i]); } return EXIT_SUCCESS; }