Scroll to navigation

DRAND48(3) Руководство программиста Linux DRAND48(3)

ИМЯ

drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - генерация равномерно распределённых псевдослучайных чисел

СИНТАКСИС

#include <stdlib.h>
double drand48(void);
double erand48(unsigned short xsubi[3]);
long lrand48(void);
long nrand48(unsigned short xsubi[3]);
long mrand48(void);
long jrand48(unsigned short xsubi[3]);
void srand48(long seedval);
unsigned short *seed48(unsigned short seed16v[3]);
void lcong48(unsigned short param[7]);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

Для всех вышеуказанных функций: _XOPEN_SOURCE
|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE
|| /* в версии Glibc <= 2.19: */ _SVID_SOURCE

ОПИСАНИЕ

Данные функции генерируют псевдослучайные числа при помощи линейного конгруэнтного метода и арифметики на основе 48-битного целого.

Функции drand48() и erand48() возвращают неотрицательное значение в формате с плавающей запятой двойной точности, равномерно распределённые в диапазоне [0.0, 1.0).

Функции lrand48() и nrand48() возвращают неотрицательные целые числа типа long, равномерно распределённые в интервале [0, 2^31).

Функции mrand48() и jrand48() возвращают целые числа типа long со знаком, равномерно распределённые в интервале [-2^31, 2^31).

The srand48(), seed48(), and lcong48() functions are initialization functions, one of which should be called before using drand48(), lrand48() or mrand48(). The functions erand48(), nrand48(), and jrand48() do not require an initialization function to be called first.

Все функции работают за счёт генерации последовательности 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 и трансформируется во возвращаемое значение.

The functions drand48(), lrand48(), and mrand48() store the last 48-bit Xi generated in an internal buffer. The functions erand48(), nrand48(), and jrand48() require the calling program to provide storage for the successive Xi values in the array argument xsubi. The functions are initialized by placing the initial value of Xi into the array before calling the function for the first time.

Функция инициализации srand48() устанавливает верхние 32 бита Xi в аргументе seedval. Нижние 16 бит устанавливаются в обязательное значение 0x330E.

Функция инициализации seed48() устанавливает Xi в 48-битное значение, указанное в аргументе-массиве seed16v. Предыдущее значение Xi копируется во внутренний буфер, указатель на который возвращается seed48().

The initialization function lcong48() allows the user to specify initial values for Xi, a, and c. Array argument elements param[0-2] specify Xi, param[3-5] specify a, and param[6] specifies c. After lcong48() has been called, a subsequent call to either srand48() or seed48() will restore the standard values of a and c.

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).

Интерфейс Атрибут Значение
drand48(), erand48(), lrand48(), nrand48(), mrand48(), jrand48(), srand48(), seed48(), lcong48() Безвредность в нитях MT-Unsafe race:drand48

Перечисленные выше функции записывают информацию о глобальном состоянии генератора случайных чисел, поэтому их нельзя использовать в нескольких нитях одновременно.

СООТВЕТСТВИЕ СТАНДАРТАМ

POSIX.1-2001, POSIX.1-2008, SVr4.

СМ. ТАКЖЕ

rand(3), random(3)

ЗАМЕЧАНИЯ

Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.

1 ноября 2020 г.