Поделиться через


Класс random_device

Формирует случайную последовательность с помощью внешнего устройства.

Синтаксис

class random_device {
public:
   typedef unsigned int result_type;

   // constructor
   explicit random_device(const std::string& token = "");

   // properties
   static result_type min();
   static result_type max();
   double entropy() const;

   // generate
   result_type operator()();

   // no-copy functions
   random_device(const random_device&) = delete;
   void operator=(const random_device&) = delete;
   };

Участники

random_device
энтропия
random_device::operator()

Замечания

Этот класс описывает источник случайных чисел и, согласно стандарту ISO C++, может быть недетерминистическим или криптостойким (но это необязательно). В реализации в Visual Studio полученные значения являются недетерминистическими и криптостойкими, но производительность ниже, чем у генераторов, созданных на основе механизмов и адаптеров механизмов (таких как mersenne_twister_engine, быстрого и качественного механизма для большинства приложений).

Результаты random_device равномерно распределены в замкнутом диапазоне [0, 232).

Не гарантируется, что random_device приведет к неблокирующему вызову.

В целом, random_device используется для получения начальных значений для других генераторов, созданных с помощью механизмов или адаптеров механизмов. Дополнительные сведения см. в статье <"Случайный>".

Пример

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

// random_device_engine.cpp
// cl.exe /W4 /nologo /EHsc /MTd
#include <random>
#include <iostream>
using namespace std;

int main()
{
    random_device gen;

    cout << "entropy == " << gen.entropy() << endl;
    cout << "min == " << gen.min() << endl;
    cout << "max == " << gen.max() << endl;

    cout << "a random value == " << gen() << endl;
    cout << "a random value == " << gen() << endl;
    cout << "a random value == " << gen() << endl;
}
entropy == 32
min == 0
max == 4294967295
a random value == 2378414971
a random value == 3633694716
a random value == 213725214

Этот пример упрощен и не представляет собой общего примера применения этого генератора. Более репрезентативный пример кода см <. в случайном> режиме.

Требования

Заголовок:<random>

Пространство имен: std

random_device::random_device

Формирует генератор.

random_device(const std::string& = "");

Замечания

Конструктор инициализирует генератор, как требуется, игнорируя строковый параметр. Возвращает значение определенного в реализации типа, производного из exception, если не удалось инициализировать random_device.

random_device::entropy

Оценивает стохастичность источника.

double entropy() const noexcept;

Замечания

Эта функция-член возвращает оценку стохастичности источника в битах.

random_device::operator()

Возвращает случайное значение.

result_type operator()();

Замечания

Возвращает значения с равномерным распределением в замкнутом интервале [min, max] в соответствии с функциями-членами min() и max(). Если случайное число не удалось получить, возвращается значение определенного в реализации типа, производного от exception.

См. также

<random>