C ++ tiene:
- 3 plantillas de motor de números pseudoaleatorios: std :: linear_congruential_engine, std :: mersenne_twister_engine y std :: subtract_with_carry_engine
- 3 plantillas de adaptador std :: discard_block_engine, std :: independent_bits_engine y std :: shuffle_order_engine
- 9 motores de números pseudoaleatorios concretos: std :: minstd_rand0, std :: minstd_rand, std :: mt19937, std :: mt19937_64, std :: ranlux24_base, std :: ranlux48_base, std :: ranlux24, std :: ranlux48 y std :: knuth_b.
- 1 motor de números aleatorios no determinista (respaldado por hardware), std :: random_device.
- 21 distribuciones de números aleatorios que pueden funcionar con esos motores para producir números aleatorios distribuidos de la forma que desee
Parece que a la mayoría de la gente le gusta std :: mt19937 (el Mersenne Twister de 32 bits), aunque es un poco exagerado para muchos trabajos.
Ver cppreference: generación de números pseudoaleatorios
- ¿Qué esfuerzos hará para crear un gráfico de la estructura de datos básicos, que también puede ser entendido por una persona no técnica?
- ¿Necesito aprender algoritmos y estructuras de datos en la interfaz?
- ¿Es posible elegir aleatoriamente un número de (0 a infinito), de modo que cada número tenga la misma probabilidad de ser elegido?
- Cómo hacer una selección aleatoria ponderada discreta en tiempo constante
- ¿Cómo puedo escribir un programa para encontrar el MCM de dos enteros positivos de su factorización prima?
La razón para no usar un generador o distribución de números aleatorios estándar de C ++ es cuando estás haciendo un trabajo estadístico o criptográfico que realmente requiere un motor diferente. Por ejemplo, boost.random ofrece bastantes motores y distribuciones adicionales, consulte Referencia – 1.60.0
También hay una pequeña advertencia de que, aunque los motores son 100% deterministas y portátiles, las distribuciones no lo son; solo están obligados a satisfacer la función de distribución de probabilidad, no a proporcionar exactamente los mismos números para la misma semilla / motor. Cuando se necesitan distribuciones portátiles, boost.random también ayuda.