c# - una - Generación robusta de números aleatorios
propiedad random c# (5)
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 ni basarse en el idioma 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?
C ++ 11 ha adoptado una robusta biblioteca de números aleatorios basada en boost.random. Puede acceder a una cantidad de motores de números aleatorios usando diferentes algoritmos para cumplir con los requisitos de calidad, velocidad o tamaño. Las implementaciones de calidad incluso proporcionarán acceso a cualquier RNG no determinista que su plataforma ofrezca a través de std::random_device
.
Además, hay muchos adaptadores para producir distribuciones específicas, eliminando la necesidad de realizar dicha manipulación a mano (algo que a menudo se hace incorrectamente).
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
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 clase nondet_random
. ¡Echale un vistazo! :-)
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.
Boost.Random
es mi primera opción para RNG