Gerador de números aleatórios C++
Aprenda como gerar números aleatórios em C++ com exemplos de código interativos. Explore rand(), srand(), biblioteca <random>, std::uniform_int_distribution e std::mt19937 com explicações detalhadas.
Precisa de um número aleatório rápido?
Experimente nosso aleatório on-line gerador de números para resultados instantâneos sem escrever nenhum código.
Editor de código C++
Aprenda como gerar números aleatórios em C++ com exemplos de código interativos. Explore rand(), srand(), biblioteca <random>, std::uniform_int_distribution e std::mt19937 com explicações detalhadas.
Saída
Saída simulada (C++ é executado no servidor)
Clique em "Executar código" para veja o exemplo de saída
C++ clássico com rand()
Use a função rand() tradicional de <cstdlib> para gerar números inteiros aleatórios. Simples e amplamente suportado, embora não seja adequado para aplicativos criptográficos devido à baixa qualidade de aleatoriedade.
Compreendendo a geração de números aleatórios em C++
C++ fornece diversas maneiras de gerar números aleatórios, evoluindo da simples função rand() em C até a moderna biblioteca <random> em C++11. O rand() clássico usa um Gerador Congruente Linear (LCG) e é propagado com srand(), enquanto a abordagem moderna usa o algoritmo Mersenne Twister e fornece várias classes de distribuição para diferentes casos de uso.
rand() Function
A função rand() clássica de <cstdlib> fornece geração simples de números pseudo-aleatórios. Semeado com srand(), ele usa um algoritmo Linear Congruential Generator (LCG). Adequado para aplicativos básicos, mas não para fins criptográficos.
<random> Library
A biblioteca <random> (C++11+) fornece geração moderna de números aleatórios com std::mt19937 (Mersenne Twister), várias distribuições como uniform_int_distribution e melhor qualidade de aleatoriedade que rand().
uniform_int_distribution
std::uniform_int_distribution fornece controlo preciso sobre intervalos de inteiros com distribuição uniforme. Perfeito para aplicações estatísticas, simulações e quando é necessário controlo exato do intervalo.
std::mt19937
std::mt19937 implements the Mersenne Twister algorithm, providing excellent statistical properties and a very long period (2^19937-1). It is the default engine for most <random> distributions.
Casos de uso comuns
Jogos e simulações
Gerar lançamentos de dados aleatórios, cartas sorteios, geração processual e eventos de jogo usando rand() ou a moderna biblioteca <random> em loops e simulações de jogos.
Segurança e criptografia
Para aplicativos de segurança, considere usar bibliotecas criptográficas especializadas. O rand() padrão não é criptograficamente seguro. Use geradores de números aleatórios seguros específicos da plataforma para senhas e tokens.
Computação de alto desempenho
A moderna biblioteca <random> com std::mt19937 oferece excelente desempenho para gerar grandes quantidades de números aleatórios em aplicativos de HPC e de computação científica.
Teste de software
Criar dados de teste aleatórios, entradas de teste fuzz e casos extremos para garantir cobertura robusta de código e detecção de bugs em aplicativos C++.
Como funciona a geração de números aleatórios em C++
A função rand() clássica do C++ (de next = (a * current + c) % m. A sequência é determinística e deve ser propagada com srand().
A moderna biblioteca (C++11+) usa o algoritmo Mersenne Twister (std::mt19937), que fornece qualidade de aleatoriedade e propriedades estatísticas muito melhores. Ele também oferece várias classes de distribuição, como uniform_int_distribution, normal_distribution e bernoulli_distribution para diferentes casos de uso.
std::random_device fornece uma fonte de entropia específica da plataforma para semear os mecanismos de números aleatórios, garantindo sequências diferentes cada vez que o programa é executado.
Dicas de especialistas para geração aleatória em C++
Evite rand() para novos Código
Para novo código C++ (C++11 e posterior), prefira a biblioteca
Sempre propagar srand()
Se estiver usando rand(), sempre chame srand(std::time(0)) no início do programa para propagar o gerador. Caso contrário, você obterá sempre a mesma sequência. Com
Use distribuições apropriadas
Para intervalos inteiros uniformes, use std::uniform_int_distribution. Para números de ponto flutuante, use std::uniform_real_distribution. Isso garante propriedades estatísticas adequadas.
Especificações técnicas
Algoritmos
- Gerador linear congruencial (função rand)
- Mersenne Twister (std::mt19937)
- Fonte de entropia específica da plataforma (std::random_device)
Características de desempenho
- rand(): qualidade de aleatoriedade rápida, mas ruim
- <random>: rápida com qualidade excelente
- std::mt19937: Muito rápido para grandes quantidades