Números aleatórios com o cabeçalho random
Gere números aleatórios de qualidade com motores e distribuições modernos
Números aleatórios com o cabeçalho random é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
Por que não rand()?
O std::rand() legado da linguagem C usa um estado global, tem baixa qualidade estatística e não é seguro para execução concorrente. O C++ moderno oferece ferramentas muito melhores em <random>.
A receita em três partes
Números aleatórios no C++ moderno envolvem três partes:
- Uma fonte de sementes (entropia verdadeira)
- Um motor gerador (estado determinístico)
- Uma distribuição (determina o formato da saída)
Inicialização com random_device
std::random_device obtém entropia real do OS — mas pode ser lento. Use-o uma vez para inicializar um motor rápido.
#include <random>
std::random_device rd;
std::mt19937 engine(rd());O motor mt19937
std::mt19937 (Mersenne Twister) é um motor pseudoaleatório rápido, com excelente qualidade estatística. É a escolha padrão para a maioria das aplicações.
Distribuição uniforme de inteiros
Produz inteiros distribuídos uniformemente em um intervalo fechado.
std::uniform_int_distribution<int> dice(1, 6);
int roll = dice(engine);Distribuição uniforme de números reais
Para números de ponto flutuante em um intervalo semiaberto [a, b).
std::uniform_real_distribution<double> dist(0.0, 1.0);
double x = dist(engine);Distribuição normal (gaussiana)
Para números aleatórios com curva de sino — comum em simulações e aprendizado de máquina.
std::normal_distribution<double> norm(0.0, 1.0); // mean 0, stddev 1
double x = norm(engine);Outras distribuições
A biblioteca inclui muitas outras: bernoulli_distribution, poisson_distribution, exponential_distribution, discrete_distribution e mais.
Aleatoriedade reproduzível
Para testes, inicialize com um valor fixo a fim de obter a mesma sequência em cada execução.
std::mt19937 engine(42);
// Same output every time you run the programEmbaralhamento aleatório
Embaralhe um contêiner com std::shuffle, que aceita qualquer motor.
#include <algorithm>
std::vector<int> v = {1,2,3,4,5};
std::shuffle(v.begin(), v.end(), engine);Armadilha: reinicializar em um laço
Não crie um novo random_device ou motor para cada número aleatório. Construa um único motor e reutilize-o entre as chamadas.
Verificação rápida
Qual é a maneira moderna mais segura de inicializar um motor pseudoaleatório em C++?
Recapitulação
A aleatoriedade no C++ moderno usa random_device para inicialização, mt19937 como motor e uma distribuição como uniform_int_distribution para dar forma à saída. Reutilize o motor — nunca crie um por chamada.
Perguntas Frequentes
A aula “Números aleatórios com o cabeçalho random” é grátis?
Sim — o texto completo de “Números aleatórios com o cabeçalho random” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Números aleatórios com o cabeçalho random”?
Gere números aleatórios de qualidade com motores e distribuições modernos Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Números aleatórios com o cabeçalho random”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Tipos inteiros versus ponto flutuante
- O cabeçalho cmath: pow, sqrt, abs, round
- Números aleatórios com o cabeçalho random
- Limites numéricos e comportamento de overflow