Random Numbers

Random Numbers — генератор псевдо-случайных чисел.

Краткое описание

#include <glib.h> GRand; GRand* g_rand_new_with_seed (guint32 seed); GRand* g_rand_new_with_seed_array (const guint32 *seed, guint seed_length); GRand* g_rand_new (void); GRand* g_rand_copy (GRand *rand_); void g_rand_free (GRand *rand_); void g_rand_set_seed (GRand *rand_, guint32 seed); void g_rand_set_seed_array (GRand *rand_, const guint32 *seed, guint seed_length); #define g_rand_boolean (rand_) guint32 g_rand_int (GRand *rand_); gint32 g_rand_int_range (GRand *rand_, gint32 begin, gint32 end); gdouble g_rand_double (GRand *rand_); gdouble g_rand_double_range (GRand *rand_, gdouble begin, gdouble end); void g_random_set_seed (guint32 seed); #define g_random_boolean () guint32 g_random_int (void); gint32 g_random_int_range (gint32 begin, gint32 end); gdouble g_random_double (void); gdouble g_random_double_range (gdouble begin, gdouble end);

Описание

Следующие функции позволяют вам использовать портируемый, быстрый и хороший генератор псевдо-случайных чисел (PRNG). Он использует Mersenne Twister PRNG, который первоначально был разработан Makoto Matsumoto и Takuji Nishimura. Детальная информация может быть найдена на www.math.keio.ac.jp/~matumoto/emt.html.

Если вам просто нужен случайный номер, вы вызываете функции g_random_*, которые создают глобально используемую GRand и используется внутренне согласно функций g_rand_*. Всякий раз когда вам необходим поток репродуктивных случайных чисел, вам лучше создать непосредственно GRand и напрямую использовать функции g_rand_*, которые будут также немного быстрее. Инициализация GRand с определённым начальным числом производит одинаковую серию случайных чисел на всех платформах. Они могут также использоваться как начальные числа например игр.

Функции g_rand*_range возвращают одинаково распределённые случайные числа высокого качества, тогда как например (g_random_int()%max) часто не приводит к одинаковому распределению чисел.

GLib изменил алгоритм отбора для генератора псевдо-случайных чисел Mersenne Twister, который используется для GRand и GRandom. Это было необходимо, потому что некоторые начальные числа ведут к очень плохим псевдо-случайным потокам. Также псевдо-случайные целочисленные сгенерированные с помощью g_rand*_int_range() будут иметь немного лучший эквивалент распределения в новой версии GLib.

Оригинальный алгоритм отбора и генерации, который может быть найден в GLib 2.0.x, может быть использован вместо нового с помощью установки переменной окружения G_RANDOM_VERSION в значение '2.0'. Используйте алгоритм GLib-2.0 только если вам необходимо точно воспроизвести последовательность чисел сгенерированных с помощью Glib-2.0.

Детали

GRand

typedef struct _GRand GRand;

Структура GRand является непрозрачной структурой данных. Доступ к ней возможен только с помощью функций g_rand_*.


g_rand_new_with_seed ()

GRand* g_rand_new_with_seed (guint32 seed);

Создаёт новый генератор случайного числа инициализированный с помощью seed.

seed : значение для инициализации генератора случайного числа.
Возвращает : новый GRand.

g_rand_new_with_seed_array ()

GRand* g_rand_new_with_seed_array (const guint32 *seed, guint seed_length);

Создаёт новый генератор случайного числа инициализированный с помощью seed.

seed : массив начальных чисел для инициализации генератора случайного числа.
seed_length : длина массива начальных чисел для инициализации генератора случайного числа.
Возвращает : новый GRand.

Начиная с версии 2.4


g_rand_new ()

GRand* g_rand_new (void);

Создаёт генератор случайного числа инициализированный с помощью начального числа принятого из /dev/urandom (если существует) или из текущего времени (как аварийный режим).

Возвращает : новый GRand.

g_rand_copy ()

GRand* g_rand_copy (GRand *rand_);

Копирует GRand в новый с тем же самым состоянием как прежде. Таким образом вы можете сделать снимок (snapshot) генератора случайного числа для воспроизведения в будущем.

rand_ : GRand.
Возвращает : новый GRand.

Начиная с версии 2.4


g_rand_free ()

void g_rand_free (GRand *rand_);

Освобождает память распределённую для GRand.

rand_ : GRand.

g_rand_set_seed ()

void g_rand_set_seed (GRand *rand_, guint32 seed);

Устанавливает начальное число для генератора случайных чисел GRand в значение seed.

rand_ : GRand.
seed : значение для переинициализации генератора случайного числа.

g_rand_set_seed_array ()

void g_rand_set_seed_array (GRand *rand_, const guint32 *seed, guint seed_length);

Инициализирует генератор случайного числа массивом longs. Массив может иметь произвольный размер, но только первые 624 значения принимаются во внимание. Эта функция полезна если вы имеете много начальных чисел низкой энтропии, или если требуется больше чем 32 разрядная энтропия для вашего приложения.

rand_ : GRand.
seed : массив для инициализации
seed_length : длина массива

Начиная с версии 2.4


g_rand_boolean()

#define g_rand_boolean(rand_)

Возвращает произвольное gboolean из rand_. Это соответствует броску монеты без смещения.

rand_ : GRand.
Возвращает : произвольное число gboolean.

g_rand_int ()

guint32 g_rand_int (GRand *rand_);

Возвращает следующее произвольное guint32 из rand_ одинаково распределённое в диапазоне [0..2^32-1].

rand_ : GRand.
Возвращает : Произвольное число.

g_rand_int_range ()

gint32 g_rand_int_range (GRand *rand_, gint32 begin, gint32 end);

Возвращает следующее произвольное gint32 из rand_ одинаково распределённое в диапазоне [begin..end-1].

rand_ : GRand.
begin : нижняя граница интервала.
end : верхняя граница интервала.
Возвращает : Произвольное число.

g_rand_double ()

gdouble g_rand_double (GRand *rand_);

Возвращает следующее произвольное gdouble из rand_ одинаково распределённое в диапазоне [0..1).

rand_ : GRand.
Возвращает : Произвольное число.

g_rand_double_range ()

gdouble g_rand_double_range (GRand *rand_, gdouble begin, gdouble end);

Возвращает следующее произвольное gdouble из rand_ одинаково распределённое в диапазоне [begin..end).

rand_ : GRand.
begin : нижняя граница интервала.
end : верхняя граница интервала.
Возвращает : Произвольное число.

g_random_set_seed ()

void g_random_set_seed (guint32 seed);

Устанавливает начальное число для глобального генератора случайных чисел, который используется функциями g_random_*, в значение seed.

seed : значение для переинициализации глобального генератора случайных чисел.

g_random_boolean()

#define g_random_boolean()

Возвращает произвольное gboolean. Это соответствует броску монеты без смещения.

Возвращает : произвольное gboolean.

g_random_int ()

guint32 g_random_int (void);

Возвращает произвольное guint32 одинаково распределённое в диапазоне [0..2^32-1].

Возвращает : Произвольное число.

g_random_int_range ()

gint32 g_random_int_range (gint32 begin, gint32 end);

Возвращает произвольное gint32 одинаково распределённое в диапазоне [begin..end-1].

begin : нижняя граница интервала.
end : верхняя граница интервала.
Возвращает : Произвольное число.

g_random_double ()

gdouble g_random_double (void);

Возвращает произвольное gdouble одинаково распределённое в диапазоне [0..1).

Возвращает : Произвольное число.

g_random_double_range ()

gdouble g_random_double_range (gdouble begin, gdouble end);

Возвращает произвольное gdouble одинаково распределённое в диапазоне [begin..end).

begin : нижняя граница диапазона.
end : верхняя граница диапазона.
Возвращает : Произвольное число.