From 382d2d431d1f2080d9dae9baadaa00495d903c24 Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Mon, 9 Mar 2015 13:07:01 +0000 Subject: Minor modifications and new file endianness.c --- randtest.c | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-) (limited to 'randtest.c') diff --git a/randtest.c b/randtest.c index 06a71de..544fc88 100644 --- a/randtest.c +++ b/randtest.c @@ -8,28 +8,39 @@ int8_t randrange(int8_t from, int8_t to) { - int base_random = rand(); - if (RAND_MAX == base_random) return randrange(from, to); - int range = to - from, - remainder = RAND_MAX % range, - bucket = RAND_MAX / range; - if (base_random < RAND_MAX - remainder) { - return from + base_random/bucket; - } else { - return randrange(from, to); - } + int base_random = rand(); + if (RAND_MAX == base_random) return randrange(from, to); + int range = to - from, + remainder = RAND_MAX % range, + bucket = RAND_MAX / range; + if (base_random < RAND_MAX - remainder) { + return from + base_random/bucket; + } else { + return randrange(from, to); + } +} + + +static unsigned rand_to_max(unsigned max) +{ + double random; + + while ((random = rand()) == (double)RAND_MAX); + + return random / (double)RAND_MAX * (double)(max + 1); } int main(int argc, char **argv) { - srand(time(NULL)); - int r; - uint16_t *amounts = calloc(sizeof(uint16_t), (TO - FROM + 1)); - for (int i = 0; i < 1000; i++) - amounts[randrange(FROM, TO) - FROM]++; + srand(time(NULL)); + + uint64_t counter[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + + for (int i = 0; i < 1000000; i++) + counter[rand_to_max(9)]++; - for (int i = 0; i < TO - FROM + 1; i++) - printf("%d: %d\n", i, amounts[i]); + for (int i = 0; i < 10; i++) + printf("%d: %lu\n", i, counter[i]); - return 0; + return EXIT_SUCCESS; } -- cgit v1.2.3-54-g00ecf