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.

Múltiplos métodos Práticas recomendadas Cópia instantânea

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.

Gerador de números aleatórios abertos

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 ) usa um algoritmo Gerador Congruente Linear (LCG). Produz números pseudo-aleatórios usando a fórmula: 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 em vez de Rand()/srand(). Ele fornece melhor aleatoriedade, mais flexibilidade e operações seguras para threads.

🔒

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 , a propagação é tratada automaticamente.

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