"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso gerar números aleatórios distribuídos uniformemente dentro de um intervalo específico em C++?

Como posso gerar números aleatórios distribuídos uniformemente dentro de um intervalo específico em C++?

Publicado em 2024-12-21
Navegar:296

How Can I Generate Uniformly Distributed Random Numbers Within a Specific Range in C  ?

Geração uniforme de números aleatórios em um intervalo

Você procura um método para gerar números aleatórios uniformemente dentro de um intervalo especificado [min, max].

Falhas com rand

Sua implementação atual usando rand() e o operador módulo pode não garantir uma distribuição uniforme, pois seu comportamento depende de RAND_MAX e do range em si.

C 11 e Uniform Range Generation

Em C 11, std::uniform_int_distribution oferece uma solução adaptada a esta necessidade:

#include 

std::uniform_int_distribution distr(min, max);
std::random_device rand_dev;
std::mt19937 generator(rand_dev());

int random_number = distr(generator);

Recursos adicionais de

O cabeçalho fornece uma vasta gama de geradores de números aleatórios com distribuições variadas, como como Bernoulli, Poisson e normal.

Embaralhamento de contêiner

Para embaralhar um contêiner, empregar std::shuffle:

#include 
#include 

std::vector vec = {4, 8, 15, 16, 23, 42};
std::random_device random_dev;
std::mt19937 generator(random_dev());

std::shuffle(vec.begin(), vec.end(), generator);

Boost.Random

Se usar um compilador C 11 não for viável , considere Boost.Random, que apresenta uma interface semelhante à contraparte C 11.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3