diff --git a/docs/reference/glib/tmpl/.gitignore b/docs/reference/glib/tmpl/.gitignore index b95a0a9e2..2d2122ddb 100644 --- a/docs/reference/glib/tmpl/.gitignore +++ b/docs/reference/glib/tmpl/.gitignore @@ -4,3 +4,4 @@ gurifuncs.sgml gvarianttype.sgml hash_tables.sgml option.sgml +random_numbers.sgml diff --git a/docs/reference/glib/tmpl/random_numbers.sgml b/docs/reference/glib/tmpl/random_numbers.sgml deleted file mode 100644 index d26ace5fe..000000000 --- a/docs/reference/glib/tmpl/random_numbers.sgml +++ /dev/null @@ -1,206 +0,0 @@ - -Random Numbers - - -pseudo-random number generator - - - -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_* 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 -(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 -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. - - - - - - - - - - - - -The #GRand struct is an opaque data structure. It should only be -accessed through the g_rand_* functions. - - - - - - -@seed: -@Returns: - - - - - - - -@seed: -@seed_length: -@Returns: - - - - - -@Returns: - - - - - - - -@rand_: -@Returns: - - - - - -@rand_: - - - - - -@rand_: -@seed: - - - - - - - -@rand_: -@seed: -@seed_length: - - - - -Returns a random #gboolean from @rand_. This corresponds to a unbiased -coin toss. - - -@rand_: a #GRand. -@Returns: a random #gboolean. - - - - - -@rand_: -@Returns: - - - - - -@rand_: -@begin: -@end: -@Returns: - - - - - -@rand_: -@Returns: - - - - - -@rand_: -@begin: -@end: -@Returns: - - - - - -@seed: - - - - -Returns a random #gboolean. This corresponds to a unbiased coin toss. - - -@Returns: a random #gboolean. - - - - - -@Returns: - - - - - -@begin: -@end: -@Returns: - - - - - -@Returns: - - - - - -@begin: -@end: -@Returns: - - diff --git a/glib/grand.c b/glib/grand.c index 8edcca399..231ed13db 100644 --- a/glib/grand.c +++ b/glib/grand.c @@ -55,6 +55,56 @@ #include /* For getpid() */ #endif +/** + * SECTION: random_numbers + * @title: Random Numbers + * @short_description: pseudo-random number generator + * + * 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_* 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 + * (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 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: + * + * The #GRand struct is an opaque data structure. It should only be + * accessed through the g_rand_* functions. + **/ + G_LOCK_DEFINE_STATIC (global_random); static GRand* global_random = NULL; @@ -357,6 +407,14 @@ g_rand_set_seed_array (GRand* rand, const guint32 *seed, guint seed_length) rand->mt[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array */ } +/** + * g_rand_boolean: + * @rand_: a #GRand. + * @Returns: a random #gboolean. + * + * Returns a random #gboolean from @rand_. This corresponds to a + * unbiased coin toss. + **/ /** * g_rand_int: * @rand_: a #GRand. @@ -527,6 +585,12 @@ g_rand_double_range (GRand* rand, gdouble begin, gdouble end) return g_rand_double (rand) * (end - begin) + begin; } +/** + * g_random_boolean: + * @Returns: a random #gboolean. + * + * Returns a random #gboolean. This corresponds to a unbiased coin toss. + **/ /** * g_random_int: *