Compartilhar via


Classe random_device

Gera uma sequência aleatória de um dispositivo externo.

Sintaxe

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;
   };

Membros

random_device
entropia
random_device::operator()

Comentários

A classe descreve uma origem de números aleatórios e com permissão, embora não seja obrigada a ser não determinista ou protegida criptograficamente pelo padrão ISO C++. Na implementação do Visual Studio, os valores não são determinísticos e são protegidos criptograficamente, mas são executados mais devagar que os geradores criados de mecanismos e adaptadores de mecanismos (como mersenne_twister_engine, o mecanismo rápido e de alta qualidade preferido pela maioria dos aplicativos).

Os resultados de random_device são distribuídos de maneira uniforme no intervalo fechado [ 0, 232).

O random_device não tem garantia de resultar em uma chamada sem bloqueio.

Em geral, o random_device é usado para semear outros geradores criados com mecanismos ou adaptadores de mecanismo. Para obter mais informações, confira <random>.

Exemplo

O código a seguir demonstra a funcionalidade básica dessa classe e os exemplos de resultado. Devido à natureza não determinística de random_device, os valores aleatórios mostrados na seção Saída não corresponderão aos resultados. Isso é normal e esperado.

// 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

Este exemplo é simplista e não representa o caso de uso geral desse gerador. Para obter um exemplo de código mais representativo, confira <random>.

Requisitos

Cabeçalho:<random>

Namespace: std

random_device::random_device

Constrói o gerador.

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

Comentários

O construtor inicia o gerador quando necessário, ignorando o parâmetro da cadeia de caracteres. Gera um valor de um tipo definido de implementação derivado de exception se não foi possível iniciar random_device.

random_device::entropy

Estima a aleatoriedade da origem.

double entropy() const noexcept;

Comentários

A função do membro retorna uma estimativa da aleatoriedade da origem, em bits.

random_device::operator()

Retorna um valor aleatório.

result_type operator()();

Comentários

Retorna valores distribuídos uniformemente no intervalo fechado [ min, max] como determinado pelas funções membro min() e max(). Gera um valor do tipo definido pela implementação derivado de exception se não for possível obter um número aleatório.

Confira também

<random>