![]() |
libdspl-2.0
Библиотека алгоритмов цифровой обработки сигналов
|
Структуры данных | |
struct | random_t |
Структура параметров датчиков псевдослучайных чисел. Подробнее... | |
Функции | |
int | randb (double *x, int n, random_t *prnd) |
Генерация бинарного униполярного [0, 1] псевдослучайного вектора Подробнее... | |
int | randb2 (double *x, int n, random_t *prnd) |
Генерация бинарного биполярного [-1, 1] псевдослучайного вектора Подробнее... | |
int | randi (int *x, int n, int start, int stop, random_t *prnd) |
Генерация целочисленного вектора равномерно распределенных псевдослучайных чисел. Подробнее... | |
int | randn (double *x, int n, double mu, double sigma, random_t *prnd) |
Генерация вектора нормально распределенных псевдослучайных чисел. Подробнее... | |
int | random_init (random_t *prnd, int type, void *seed) |
Инициализация датчиков псевдослучайных чисел. Подробнее... | |
int | randu (double *x, int n, random_t *prnd) |
Генерация вектора равномерно-распределенных в интервале от 0 до 1 псевдослучайных чисел. Подробнее... | |
Подробное описание
В данном разделе описаны функции генерации псевдослучайных чисел с использованием различных датчиков.
Функции
◆ randb()
int randb | ( | double * | x, |
int | n, | ||
random_t * | prnd | ||
) |
Генерация бинарного униполярного [0, 1] псевдослучайного вектора
Функция генерирует униполярный псевдослучайный вектор, каждый элемент которого принимает равновероятное значение 0 или 1.
- Аргументы
-
[in,out] x
Указатель на вектор случайных бинарных чисел.
Размер вектора[n x 1]
.
Память должна быть выделена.
[in] n Размер вектора x
.
[in] prnd Указатель на структуру random_t
параметров датчиков псевдослучайных чисел.
Структура должна быть предварительно заполнена функцией random_init.
Данный указатель может бытьNULL
, тогда будет использоваться встроенный датчик, определенный стандартом языка Си. Однако для серьезных нужд, например в криптографии, данный режим использовать не рекомендуется. Нет гарантии в качестве произведенной случайной последовательности если параметрprnd
задан какNULL
.
- Возвращает
RES_OK
— вектор целых псевдослучайных чисел рассчитан успешно.
В противном случае код ошибки.
Пример использования функции:
Программа рассчитывает униполярный [0, 1] и биполярный [-1, 1] бинарные псевдослучайные векторы.
В результате выполнения программы можно увидеть график:

◆ randb2()
int randb2 | ( | double * | x, |
int | n, | ||
random_t * | prnd | ||
) |
Генерация бинарного биполярного [-1, 1] псевдослучайного вектора
Функция генерирует биполярный псевдослучайный вектор, каждый элемент которого принимает равновероятное значение -1 или 1.
- Аргументы
-
[in,out] x
Указатель на вектор случайных бинарных чисел.
Размер вектора[n x 1]
.
Память должна быть выделена.
[in] n Размер вектора x
.
[in] prnd Указатель на структуру random_t
параметров датчиков псевдослучайных чисел.
Структура должна быть предварительно заполнена функцией random_init.
Данный указатель может бытьNULL
, тогда будет использоваться встроенный датчик, определенный стандартом языка Си. Однако для серьезных нужд, например в криптографии, данный режим использовать не рекомендуется. Нет гарантии в качестве произведенной случайной последовательности если параметрprnd
задан какNULL
.
- Возвращает
RES_OK
— вектор целых псевдослучайных чисел рассчитан успешно.
В противном случае код ошибки.
Пример использования функции:
Программа рассчитывает униполярный [0, 1] и биполярный [-1, 1] бинарные псевдослучайные векторы.
В результате выполнения программы можно увидеть график:

◆ randi()
int randi | ( | int * | x, |
int | n, | ||
int | start, | ||
int | stop, | ||
random_t * | prnd | ||
) |
Генерация целочисленного вектора равномерно распределенных псевдослучайных чисел.
Функция генерирует псевдослучайный вектор целых чисел в диапазоне от start
до stop
включительно.
- Аргументы
-
[in,out] x
Указатель на вектор случайных чисел.
Размер вектора[n x 1]
.
Память должна быть выделена.
[in] n Размер вектора x
.
[in] start Начало диапазона целых чисел.
[in] stop Конец диапазона целых чисел.
[in] prnd Указатель на структуру random_t
параметров датчиков псевдослучайных чисел.
Структура должна быть предварительно заполнена функцией random_init.
Данный указатель может бытьNULL
, тогда будет использоваться встроенный датчик, определенный стандартом языка Си. Однако для серьезных нужд, например в криптографии, данный режим использовать не рекомендуется. Нет гарантии в качестве произведенной случайной последовательности если параметрprnd
задан какNULL
.
- Возвращает
RES_OK
— вектор целых псевдослучайных чисел рассчитан успешно.
В противном случае код ошибки.
Пример использования функции:
Программа рассчитывает целочисленный вектор псевдослучайных чисел в диапазоне [-4, 3].
В результате выполнения программы можно увидеть график:

◆ randn()
int randn | ( | double * | x, |
int | n, | ||
double | mu, | ||
double | sigma, | ||
random_t * | prnd | ||
) |
Генерация вектора нормально распределенных псевдослучайных чисел.
Функция использует преобразование Бокса-Мюллера для приведения
равномерно-распределенных псевдослучайных чисел к нормальному распределению с математическим ожиданием \(\mu\) и среднеквадратическим отклонением \(\sigma\).
- Аргументы
-
[in,out] x
Указатель на вектор случайных чисел.
Размер вектора[n x 1]
.
Память должна быть выделена.
[in] n Размер вектора случайных чисел.
[in] mu Математическое ожидание \(\mu\).
[in] sigma Среднеквадратическое отклонение \(\sigma\).
Дисперсия сгенерированных чисел равна \(\sigma^2\).
[in] prnd Указатель на структуру random_t
параметров датчиков псевдослучайных чисел.
Структура должна быть предварительно заполнена функцией random_init.
Данный указатель может бытьNULL
, тогда будет использоваться встроенный датчик, определенный стандартом языка Си. Однако для серьезных нужд, например в криптографии, данный режим использовать не рекомендуется. Нет гарантии в качестве произведенной случайной последовательности если параметрprnd
задан какNULL
.
- Возвращает
RES_OK
— вектор нормально распределенных псевдослучайных чисел рассчитан успешно.
В противном случае код ошибки.
Пример использования функции:
Программа рассчитывает независимые векторы нормально распределенных псевдослучайных чисел, \(\mu = 0\) и \(\sigma=1\).
В результате выполнения программы можно увидеть график:

◆ random_init()
int random_init | ( | random_t * | prnd, |
int | type, | ||
void * | seed | ||
) |
Инициализация датчиков псевдослучайных чисел.
- Аргументы
-
[in,out] prnd Указатель на структуру параметров и векторов состояния датчиков псевдослучайных чисел, которая будет инициализирована.
[in] type Тип датчика псевдослучайных чисел: RAND_TYPE_MRG32K3A - 32-битный датчик MRG32K3A RAND_TYPE_MT19937 - 64-битный датчик MT19937-64
[in] seed Указатель на начальную инициализацию датчика.
Данный указатель имеет типvoid*
, поскольку параметр инициализации зависит от типа датчика. Например если инициализируем датчик MRG32K3A, т.е. параметрtype
задан какRAND_TYPE_MRG32K3A
, то данный указатель приводится к типуdouble
: Если же используется 64-битный датчик Вихрь Мерсенна (type
задан какRAND_TYPE_MT19937
), тоseed
приводится к типуunsigned long long
:При фиксированном начальном значении датчика, псевдослучайные числа будут повторяться при каждом запуске программы.random_t rnd = {0};unsigned long long seed = 1234353456;random_init(&rnd, RAND_TYPE_MT19937, (void*)&seed);
Указательseed
может бытьNULL
. В этом случае начальная инициализация датчиков будет задаваться случайными значениями и генерируемые псевдослучайные числа будут различными при каждом запуске программы.
См. определение в файле random_init.c строка 120
◆ randu()
int randu | ( | double * | x, |
int | n, | ||
random_t * | prnd | ||
) |
Генерация вектора равномерно-распределенных в интервале от 0 до 1 псевдослучайных чисел.
- Аргументы
-
[in,out] x
Указатель на вектор случайных чисел.
Размер вектора[n x 1]
.
Память должна быть выделена.
[in] n Размер вектора случайных чисел.
[in] prnd Указатель на структуру random_t
параметров датчиков псевдослучайных чисел.
Структура должна быть предварительно заполнена функцией random_init.
Данный указатель может бытьNULL
, тогда будет использоваться встроенный датчик, определенный стандартом языка Си. Однако для серьезных нужд, например в криптографии, данный режим использовать не рекомендуется. Нет гарантии в качестве произведенной случайной последовательности если параметрprnd
задан какNULL
.
- Возвращает
RES_OK
— вектор равномерно-распределенных псевдослучайных чисел рассчитан успешно.
В противном случае код ошибки.
Пример использования функции с различными датчиками псевдослучайных чисел приведен в следующем листинге:
Программа рассчитывает независимые векторы равномерно-распределенных от 0 до 1 псевдослучайных чисел и выводит их на график для трех различных датчиков: MRG32K3A, MT19937-64 и встроенный датчик, определенный стандартом языка Си.
В результате выполнения программы можно увидеть график:

Однако при детальном исследовании датчиков, можно обнаружить, что встроенный датчик, определенный стандартом языка Си, выдает значения на фиксированной сетке.
Чтобы проверить это можно выполнить следующую программу:
Данная программа аккумулирует только значения датчиков в интервале от 0 до 0.001 и выводит их на график:

Из графика хорошо видно, что данные встроенного датчика выдаются на равноотстоящей сетке значений, в отличии от датчиков MRG32K3A и MT19937-64, которые сохранили псевдослучайный характер.
Документация по libdspl-2.0. Последние изменения: Ср 5 Янв 2022 12:44:35. Создано системой