Класс random_device
Класс random_device представляет собой
недетерминированный генератор случайных чисел.
В отличие от псевдослучайных генераторов, таких
как mt19937, класс random_device
использует аппаратные источники энтропии (например,
шум процессора или специальные инструкции) для
получения действительно случайных значений.
Объект класса random_device можно вызвать
как функцию, которая возвращает случайное
беззнаковое целое число. Также у класса есть
методы entropy и min, max,
позволяющие получить информацию о диапазоне
и качестве генератора.
Конструктор класса принимает необязательный параметр - строку с именем источника энтропии. Если источник не указан, используется реализация по умолчанию.
Синтаксис
#include <random>
std::random_device name;
std::random_device name(token);
unsigned int value = name();
Пример
Давайте создадим объект класса random_device
и получим несколько случайных чисел:
#include <iostream>
#include <random>
using namespace std;
int main()
{
random_device rd;
cout << rd() << endl;
cout << rd() << endl;
cout << rd() << endl;
return 0;
}
Результат выполнения кода:
3499211612
581869302
3890346734
Пример
Давайте получим информацию о диапазоне и энтропии генератора:
#include <iostream>
#include <random>
using namespace std;
int main()
{
random_device rd;
cout << "Min: " << rd.min() << endl;
cout << "Max: " << rd.max() << endl;
cout << "Entropy: " << rd.entropy() << endl;
return 0;
}
Результат выполнения кода:
"Min: 0"
"Max: 4294967295"
"Entropy: 32"
Пример
Давайте используем random_device для
инициализации генератора mt19937
и получим случайное число в заданном диапазоне:
#include <iostream>
#include <random>
using namespace std;
int main()
{
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dist(1, 100);
cout << dist(gen) << endl;
cout << dist(gen) << endl;
cout << dist(gen) << endl;
return 0;
}
Результат выполнения кода:
42
87
15
Смотрите также
-
класс
mt19937,
который представляет собой генератор псевдослучайных чисел -
класс
uniform_int_distribution,
который генерирует равномерно распределенные целые числа -
класс
uniform_real_distribution,
который генерирует равномерно распределенные вещественные числа -
функция
rand,
которая генерирует псевдослучайные числа