drand48 - seed48,
drand48(3)
seed48,
ОБЗОР
#include <stdlib.h>
double drand48(void);
double erand48(unsigned short xsubi[3]);
long int lrand48(void);
long int nrand48(unsigned short xsubi[3]);
long int mrand48(void);
long int jrand48(unsigned short xsubi[3]);
void srand48(long int seedval);
unsigned short *seed48(unsigned short seed16v[3]);
void lcong48(unsigned short param[7]);
Требования макроса тестирования свойств для glibc
(см. feature_test_macros(7)):
Для всех вышеуказанных функций: _SVID_SOURCE || _XOPEN_SOURCE
ОПИСАНИЕ
Данные функции генерируют псевдослучайные числа при помощи линейного
конгруэнтного метода и арифметики на основе 48-битного целого.
Функции drand48() и erand48() возвращают неотрицательное значение в
формате с плавающей запятой двойной точности, равномерно распределённые в
диапазоне [0.0, 1.0).
Функции lrand48() и nrand48() возвращают неотрицательные целые числа
типа long, равномерно распределённые в интервале [0, 2^31).
Функции mrand48() и jrand48() возвращают целые числа типа long со
знаком, равномерно распределённые в интервале [-2^31, 2^31).
Функции srand48(), seed48() и lcong48() являются
функциями-инициализаторами и должны быть вызваны до использования
drand48(), lrand48() или mrand48(). Функциям erand48(),
nrand48() и jrand48() для первого вызова инициализаторы не требуются.
Все функции работают за счёт генерации последовательности 48-битных целых
чисел Xi согласно формуле линейного конгруэнтного метода:
Xn+1 = (aXn + c) mod m, где n >= 0
Параметр m = 2^48, поэтому в вычислениях используются 48-битные целые
числа. Если lcong48() не вызывалась, то a и c принимают следующие
значения:
a = 0x5DEECE66D
c = 0xB
Для получения значения, возвращаемого любой из функций (drand48(),
erand48(), lrand48(), nrand48(), mrand48() или jrand48()),
сначала генерируется следующее 48-битное Xi в последовательности. Затем
подходящее число бит (согласно типу возвращаемых данных) копируется в
верхние биты Xi и трансформируется во возвращаемое значение.
Функции drand48(), lrand48() и mrand48() сохраняют последнее
сгенерированное 48-битное значение Xi во внутреннем буфере. Для функций
erand48(), nrand48() и jrand48() требуется, чтобы вызывающая
программа создавала хранилище для последующих значений Xi и указывала его
в аргументе-массиве xsubi. Функции инициализируются путём помещения
начального значения Xi в массив до их первого вызова.
Функция инициализации srand48() устанавливает верхние 32 бита Xi в
аргументе seedval. Нижние 16 бит устанавливаются в обязательное значение
0x330E.
Функция инициализации seed48() устанавливает Xi в 48-битное значение,
указанное в аргументе-массиве seed16v. Предыдущее значение Xi
копируется во внутренний буфер, указатель на который возвращается
seed48().
Функция инициализации lcong48() позволяет пользователю указывать
первоначальные значения для Xi, a и c. Для Xi используется
аргумент массива param[0-2], для a --- param[3-5], а для c ---
param[6]. После вызова lcong48() следующий вызов srand48() или
seed48() восстановит стандартные значения a и c.
АТРИБУТЫ
Описание терминов данного раздела смотрите в
attributes(7).
Интерфейс Атрибут Значение
drand48(),
erand48(),
lrand48(),
nrand48(),
mrand48(),
jrand48(),
srand48(),
seed48(),
lcong48()
безвредность в потоках:
MT-Unsafe race:drand48
Перечисленные выше функции записывают информацию о глобальном состоянии
генератора случайных чисел, поэтому их нельзя использовать в нескольких
нитях одновременно.
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, SVr4.