The following functions allow you to use a portable, fast and good pseudo-random number generator (PRNG).
Do not use this API for cryptographic purposes such as key generation, nonces, salts or one-time pads.
This PRNG is suitable for non-cryptographic use such as in games
(shuffling a card deck, generating levels), generating data for
a test suite, etc. If you need random data for cryptographic
purposes, it is recommended to use platform-specific APIs such
/dev/random on UNIX, or
If you just need a random number, you simply call the
functions, which will create a globally used
GRand and use the
g_rand_*() functions 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
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.
GLib changed the seeding algorithm for the pseudo-random number
generator Mersenne Twister, as used by
GRand. This was necessary,
because some seeds would yield very bad pseudo-random streams.
Also the pseudo-random integers generated by
will have a slightly better equal distribution with the new
version of GLib.
The original seeding and generation algorithms, as found in
GLib 2.0.x, can be used instead of the new ones by setting the
G_RANDOM_VERSION to the value of
Use the GLib-2.0 algorithms only if you have sequences of numbers
generated with Glib-2.0 that you need to reproduce exactly.