Unix Man (Справочное руководство)


DRAND48(3C) - часть 2


Первым этапом вычисления возвращаемого значения для любой из функций drand48, erand48, lrand48, nrand48, mrand48 или jrand48 является генерация очередного 48 битного значения X[i]. Далее из него берутся старшие биты в количестве, определяемом типом требуемого данного, которые и преобразуются в возвращаемое значение.

Функции drand48, lrand48 и mrand48 сохраняют последнее сгенерированное 48-битное значение X[i] во внутреннем буфере - вот почему они должны быть инициализированы перед своим вызовом. Для функций же erand48, nrand48 и jrand48 вызывающая программа должна сама резервировать память под очередное значение X[i], передаваемое при вызове как аргумент. Эти функции инициализации не требуют; вызывающая программа должна просто поместить желаемое начальное значение X[i] в массив из трех 16-битных слов и передать тот как аргумент. Посредством использования различных аргументов функции erand48, nrand48 и jrand48 позволяют различным модулям большой программы генерировать несколько независимых потоков псевдослучайных чисел; другими словами, последовательность чисел в каждом потоке не зависит от того, как часто программа вызывалась для генерации чисел других потоков.

Инициализирующая функция srand48 устанавливает старшие 32 бита значения X[i] равными 32-м битам своего аргумента. Независимо от значения старших бит, младшие 16 бит X[i] устанавливаются равными 0x330E.

Инициализирующая функция seed48 устанавливает значение всех 48 бит X[i] по значению аргумента - массива из трех 16-битных слов. Предыдущее значение X[i] копируется в 48-битный внутренний буфер, используемый только функцией seed48. Возвращаемое функцией seed48 значение представляет собой указатель на этот буфер. Возвращаемый указатель в большинстве случаев игнорируется, однако он может оказаться полезным при перезапуске программы с данной точки в будущем. Для этого, используя указатель, следует извлечь и сохранить последнее значение X[i], которое затем, при перезапуске, употребить для повторной инициализации с помощью seed48.

Инициализирующая функция lcong48 дает пользователю возможность указать начальное значение X [i], значение коэффициента a и аддитивной константы c. В массиве, являющемся ее аргументом, элементы param [0-2] определяют X [i], элементы param [3-5] - коэффициент a и, наконец, param [6] - 16-битную константу c. После вызова lcong48 восстановить "стандартные" значения коэффициента a и константы c, описанные выше, можно путем вызова какой либо из функций srand48 или seed48.

ПРИМЕЧАНИЯ


Исходный текст данного семейства функций для мобильной версии может быть использован даже на компьютерах, не обладающих арифметикой вещественных чисел. В такой ситуации функций drand48 и erand48 не существует; их заменяют следующие две функции:

long irand48 (m) unsigned short m;

long krand48 (xsubi, m) unsigned short xsubi [3], m;

Функции irand48 и krand48 возвращают неотрицательные целые числа типа long, равномерно распределенные в интервале [0, m-1].

СМ. ТАКЖЕ


.




Начало  Назад  Вперед



Книжный магазин