Geração de números aleatórios

C++:
Geração de números aleatórios

Como Fazer:

Para gerar números aleatórios em C++, você normalmente faria uso do cabeçalho <random>, que foi introduzido no C++11, oferecendo uma ampla gama de facilidades para gerar números aleatórios de várias distribuições.

#include <iostream>
#include <random>

int main() {
    // Inicializa um motor de aleatoriedade
    std::random_device rd;  
    std::mt19937 gen(rd()); 

    // Define o intervalo [0, 99] inclusivo
    std::uniform_int_distribution<> distrib(0, 99); 

    // Gera e imprime 5 números aleatórios dentro do intervalo definido
    for(int n=0; n<5; ++n)
        std::cout << distrib(gen) << ' ';
    return 0;
}

Este exemplo de código inicializa um gerador de números aleatórios Mersenne Twister com uma semente de std::random_device. Em seguida, define uma distribuição uniforme de inteiros no intervalo [0, 99] e, finalmente, imprime 5 números aleatórios dessa distribuição.

A saída de exemplo pode parecer assim, mas tenha em mente que cada execução provavelmente produzirá resultados diferentes:

45 67 32 23 88

Aprofundando:

Historicamente, a geração de números aleatórios em C++ dependia fortemente da função rand() e da função de semeadura srand(), encontradas no cabeçalho <cstdlib>. No entanto, essa abordagem frequentemente enfrentava críticas pela falta de uniformidade e previsibilidade na distribuição dos números gerados.

A introdução do cabeçalho <random> no C++11 marcou uma melhoria significativa, oferecendo um sistema sofisticado para produzir números aleatórios. As facilidades fornecidas incluem uma variedade de motores (como std::mt19937 para Mersenne Twister) e distribuições (como std::uniform_int_distribution para distribuição uniforme de inteiros) que podem ser combinadas para atender às necessidades específicas do programador, levando a um comportamento mais previsível, melhor desempenho e maior flexibilidade.

Embora a biblioteca <random> seja muito melhor do que a abordagem antiga rand(), vale ressaltar que gerar números verdadeiramente aleatórios — especialmente para fins criptográficos — ainda depende de considerações adicionais. Para aplicações criptográficas, devem ser usadas bibliotecas projetadas especificamente para segurança, que muitas vezes utilizam fontes de entropia de hardware.