Top | ![]() |
![]() |
![]() |
![]() |
GRand * | g_rand_new_with_seed () |
GRand * | g_rand_new_with_seed_array () |
GRand * | g_rand_new () |
GRand * | g_rand_copy () |
void | g_rand_free () |
void | g_rand_set_seed () |
void | g_rand_set_seed_array () |
#define | g_rand_boolean() |
guint32 | g_rand_int () |
gint32 | g_rand_int_range () |
gdouble | g_rand_double () |
gdouble | g_rand_double_range () |
void | g_random_set_seed () |
#define | g_random_boolean |
guint32 | g_random_int () |
gint32 | g_random_int_range () |
gdouble | g_random_double () |
gdouble | g_random_double_range () |
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
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/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_*
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 e.g.
games.
The g_rand*_range
functions will return high
quality equally distributed random numbers, whereas for example the
(
approach often
doesn't yield equally distributed numbers.g_random_int()
%max)
GLib changed the seeding algorithm for the pseudo-random number
generator Mersenne Twister, as used by
GRand and GRandom.
This was necessary, because some seeds would yield very bad
pseudo-random streams. Also the pseudo-random integers generated by
g_rand*_int_range()
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
environment variable G_RANDOM_VERSION
to the value of
'2.0'. Use the GLib-2.0 algorithms only if you have sequences of
numbers generated with Glib-2.0 that you need to reproduce exactly.
GRand *
g_rand_new_with_seed (guint32 seed
);
Creates a new random number generator initialized with seed
.
GRand * g_rand_new_with_seed_array (const guint32 *seed
,guint seed_length
);
Creates a new random number generator initialized with seed
.
seed |
an array of seeds to initialize the random number generator. |
|
seed_length |
an array of seeds to initialize the random number generator. |
Since 2.4
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).
GRand *
g_rand_copy (GRand *rand_
);
Copies a GRand into a new one with the same exact state as before. This way you can take a snapshot of the random number generator for replaying later.
Since 2.4
void g_rand_set_seed (GRand *rand_
,guint32 seed
);
Sets the seed for the random number generator GRand to seed
.
void g_rand_set_seed_array (GRand *rand_
,const guint32 *seed
,guint seed_length
);
Initializes the random number generator by an array of longs. Array can be of arbitrary size, though only the first 624 values are taken. This function is useful if you have many low entropy seeds, or if you require more then 32bits of actual entropy for your application.
Since 2.4
#define g_rand_boolean(rand_)
Returns a random gboolean from rand_
. This corresponds to a
unbiased coin toss.
guint32
g_rand_int (GRand *rand_
);
Returns the next random guint32 from rand_
equally distributed over
the range [0..2^32-1].
gint32 g_rand_int_range (GRand *rand_
,gint32 begin
,gint32 end
);
Returns the next random gint32 from rand_
equally distributed over
the range [begin
..end
-1].
rand_ |
a GRand. |
|
begin |
lower closed bound of the interval. |
|
end |
upper open bound of the interval. |
gdouble
g_rand_double (GRand *rand_
);
Returns the next random gdouble from rand_
equally distributed over
the range [0..1).
gdouble g_rand_double_range (GRand *rand_
,gdouble begin
,gdouble end
);
Returns the next random gdouble from rand_
equally distributed over
the range [begin
..end
).
rand_ |
a GRand. |
|
begin |
lower closed bound of the interval. |
|
end |
upper open bound of the interval. |
void
g_random_set_seed (guint32 seed
);
Sets the seed for the global random number generator, which is used
by the g_random_*
functions, to seed
.
#define g_random_boolean()
Returns a random gboolean. This corresponds to a unbiased coin toss.
guint32
g_random_int (void
);
Return a random guint32 equally distributed over the range [0..2^32-1].
gint32 g_random_int_range (gint32 begin
,gint32 end
);
Returns a random gint32 equally distributed over the range
[begin
..end
-1].
gdouble
g_random_double (void
);
Returns a random gdouble equally distributed over the range [0..1).
typedef struct _GRand GRand;
The GRand struct is an opaque data structure. It should only be
accessed through the g_rand_*
functions.