Commit 9537739f authored by Tom Lane's avatar Tom Lane

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.
parent d9384a4b
/* /*
* $PostgreSQL: pgsql/contrib/pgbench/pgbench.c,v 1.75 2007/12/11 02:31:49 tgl Exp $ * $PostgreSQL: pgsql/contrib/pgbench/pgbench.c,v 1.76 2008/03/10 01:23:04 tgl Exp $
* *
* pgbench: a simple benchmark program for PostgreSQL * pgbench: a simple benchmark program for PostgreSQL
* written by Tatsuo Ishii * written by Tatsuo Ishii
...@@ -191,11 +191,15 @@ usage(void) ...@@ -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"); 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 static int
getrand(int min, int max) 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 */ /* call PQexec() and exit() on failure */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment