From 74d06eb7720be2dccf4aa38be1823fff8ff486ba Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 10 Mar 2008 01:23:04 +0000 Subject: [PATCH] Fix pgbench's getrand() function so that min and max have approximately the same chance of being selected as do numbers between them. Problem noted by Greg Stark; fix by Alexey Klyukin. --- contrib/pgbench/pgbench.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c index 340846505b..70daa3ec07 100644 --- a/contrib/pgbench/pgbench.c +++ b/contrib/pgbench/pgbench.c @@ -191,11 +191,15 @@ usage(void) fprintf(stderr, "(initialize mode): pgbench -i [-h hostname][-p port][-s scaling_factor] [-F fillfactor] [-U login][-d][dbname]\n"); } -/* random number generator */ +/* random number generator: uniform distribution from min to max inclusive */ static int getrand(int min, int max) { - return min + (int) (((max - min) * (double) random()) / MAX_RANDOM_VALUE + 0.5); + /* + * Odd coding is so that min and max have approximately the same chance of + * being selected as do numbers between them. + */ + return min + (int) (((max - min + 1) * (double) random()) / (MAX_RANDOM_VALUE + 1.0)); } /* call PQexec() and exit() on failure */ -- 2.39.5