"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo generar números aleatorios distribuidos uniformemente dentro de un rango específico en C++?

¿Cómo puedo generar números aleatorios distribuidos uniformemente dentro de un rango específico en C++?

Publicado el 2024-12-21
Navegar:366

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

Generación uniforme de números aleatorios en un rango

Busca un método para generar uniformemente números aleatorios dentro de un rango específico [mínimo, máximo].

Defectos con rand

Es posible que su implementación actual usando rand() y el operador de módulo no garantice una distribución uniforme, ya que su comportamiento depende de RAND_MAX y el rango en sí.

C 11 y Generación de Rango Uniforme

En C 11, std::uniform_int_distribution ofrece una solución adaptada a esta necesidad:

#include 

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

int random_number = distr(generator);

Características adicionales de

El encabezado proporciona una amplia gama de generadores de números aleatorios con diferentes distribuciones, como como Bernoulli, Poisson y normal.

Barajado de contenedores

Para barajar un contenedor, emplee 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

Si no es factible usar un compilador C 11 , considere Boost.Random, que presenta una interfaz similar a su contraparte C 11.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3