Name
Random Numbers -- pseudo random number generator.
Description
The following functions allow you to use a portable, fast and good
pseudo random number generator (PRNG). It uses the Mersenne Twister
PRNG, which was originally developed by Makoto Matsumoto and Takuji
Nishimura. Further information can be found at www.math.keio.ac.jp/~matumoto/emt.html.
If you just need a random number, you simply call the g_random_*
functions, which will create a globally used GRand and use the
according g_rand_* function internally. Whenever you need a stream of
reproducible random numbers, you better create a GRand yourself and
use the g_rand_* functions directly, which will also be slightly
faster. Initializing a GRand with a certain seed will produce exactly
the same series of random numbers on all platforms. This can thus be
used as a seed for e.g. games.
The g_rand*_range functions will return high quality equally
distributed random numbers, whereas for example the
(g_random_int()%max) approach often doesn't
yield equally distributed numbers.
A random binary decision is best implemented by using
if(g_random_int()&(1<<a)), where a can be every
integer constant from 0 to 31. The Mersenne Twister PRNG is said to
produce highly random lower bits too, but it is common not to rely on
that, so choosing a to be from 4 to 31 might be wise.
Details
struct GRand
The GRand struct is an opaque data structure. It should only be
accessed through the g_rand_* functions.
g_rand_new_with_seed ()
Creates a new random number generator initialized with seed.
g_rand_new ()
GRand* g_rand_new (void); |
Creates a new random number generator initialized with a seed taken
either from /dev/urandom (if existing) or from the current time (as
a fallback).
g_rand_free ()
void g_rand_free (GRand *rand); |
Frees the memory allocated for the GRand.
g_rand_set_seed ()
Sets the seed for the random number generator GRand to seed.
g_rand_int ()
Return the next random guint32 from rand equaly distributed over
the range [0..2^32-1].
g_rand_int_range ()
Return the next random gint32 from rand equaly distributed over
the range [min..max-1].
g_rand_double ()
Return the next random gdouble from rand equaly distributed over
the range [0..1).
g_rand_double_range ()
Return the next random gdouble from rand equaly distributed over
the range [min..max).
g_random_set_seed ()
void g_random_set_seed (guint32 seed); |
Sets the seed for the global random number generator, which is used
by te g_random_* functions, to seed.
g_random_int ()
Return a random guint32 equaly distributed over the range
[0..2^32-1].
g_random_int_range ()
Return a random gint32 equaly distributed over the range
[min..max-1].
g_random_double ()
Return a random gdouble equaly distributed over the range [0..1).
g_random_double_range ()
Return a random gdouble equaly distributed over the range [min..max).