Robusta generación de números aleatorios

votos
34

Estoy buscando un RNG rentable y razonablemente robusto que no use hardware especial. Puede usar métodos matemáticos (Mersenne Twister, etc.), puede recoger entropía de la máquina, lo que sea. En Linux / etc tenemos un drand48()que genera 48 bits aleatorios. Me gustaría una función / clase similar para C ++ o C # que pueda generar más de 32 bits de aleatoriedad y que los bits de bajo orden sean tan aleatorios como los de orden alto.

No tiene que ser criptográficamente seguro, pero no debe usar o estar basado en el lenguaje C rand()o .NET System.Random.

Se agradecerá cualquier código fuente, enlaces a la fuente, etc. En su defecto, ¿qué tipo de RNG debería estar buscando?

Publicado el 03/08/2008 a las 03:05
fuente por usuario
En otros idiomas...                            


5 respuestas

votos
27

Para C ++, Boost.Random es probablemente lo que estás buscando. Tiene soporte para MT (entre muchos otros algoritmos) y puede recopilar entropía a través de la nondet_randomclase. ¡Echale un vistazo! :-)

Respondida el 03/08/2008 a las 03:18
fuente por usuario

votos
8

La Biblioteca Científica Gnu (GSL) tiene un amplio conjunto de generadores RN, arnés de prueba, etc. Si estás en Linux, probablemente ya esté disponible en tu sistema.

Respondida el 03/08/2008 a las 03:26
fuente por usuario

votos
7

Cuidado con la Biblioteca Científica Gnu. Está licenciado bajo la GPL en lugar de LGPL.

Como mencionaron otras personas, las clases aleatorias de Boost son un buen comienzo. Su implementación se ajusta al código PRNG programado para TR1:

http://www.boost.org/doc/libs/1_35_0/libs/random/index.html http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1452.html

Si tiene una versión reciente del compilador G ++, puede encontrar las bibliotecas TR1 ya incluidas

Respondida el 13/08/2008 a las 19:08
fuente por usuario

votos
2

Boost.Random es mi primera opción para RNG

http://www.boost.org/doc/libs/random

Respondida el 29/03/2012 a las 11:32
fuente por usuario

votos
5

C ++ 11 ha adoptado una biblioteca de números aleatorios robusto basado en boost.random. Se puede acceder a una serie de motores de números aleatorios utilizando diferentes algoritmos para satisfacer sus requisitos de calidad, velocidad o tamaño. Implementaciones de calidad podrán disponer de acceso a lo RNG no determinista su plataforma ofrece a través std::random_device.

Además hay muchos adaptadores para producir distribuciones específicas, lo que elimina la necesidad de hacer tal manipulación con la mano (algo que a menudo se hace incorrectamente).

#include <random>

Respondida el 26/06/2012 a las 17:05
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more