Pergunta:
Como faço para gerar números aleatórios facilmente seguindo uma distribuição normal em C ou C sem usar Boost bibliotecas?
Resposta:
Transformada de Box-Muller
A transformada de Box-Muller é um método amplamente utilizado para gerar números normalmente distribuídos de um gerador uniforme de números aleatórios. Ele produz valores que aderem com precisão a uma distribuição gaussiana.
A fórmula matemática para a transformada de Box-Muller é a seguinte:
x = sqrt(-2 * log(U1)) * cos(2 * π * U2) y = sqrt(-2 * log(U1)) * sin(2 * π * U2)
onde:
Implementação:
Para implementar a transformação Box-Muller em C/C , você pode usar o seguinte código:
#include#include double box_muller() { std::random_device rd; // Seed the random number generator with a system clock seed std::default_random_engine rng(rd()); std::uniform_real_distribution dist(0.0, 1.0); double U1 = dist(rng); double U2 = dist(rng); double x = sqrt(-2 * log(U1)) * cos(2 * M_PI * U2); return x; }
Uso:
Para gerar um número aleatório normalmente distribuído, basta chamar a função box_muller():
double random_number = box_muller();
O valor de random_number será uma variável aleatória distribuída gaussiana com média 0 e desvio padrão 1.
Nota:
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