Pregunta

Estoy buscando un RNG de alto rendimiento y razonablemente robusto que no utilice hardware especial.Puede utilizar métodos matemáticos (Mersenne Twister, etc.), puede "recolectar 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 cuyos bits de orden inferior sean igualmente aleatorios que los de orden superior.

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

Cualquier código fuente, enlaces a la fuente, etc.¡sería apreciado!De lo contrario, ¿qué TIPO de RNG debería buscar?

¿Fue útil?

Solución

Para C++, Impulsar.Aleatorio Probablemente sea lo que estás buscando.Tiene soporte para MT (entre muchos otros algoritmos) y puede recolectar entropía a través del nondet_random clase.¡Échale un vistazo!:-)

Otros consejos

La biblioteca científica Gnu (GSL) tiene un conjunto bastante extenso de generadores RN, arneses de prueba, etc.Si utiliza Linux, probablemente ya esté disponible en su sistema.

Cuidado con la Biblioteca Científica Gnu.Tiene licencia 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 previsto 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++, es posible que encuentre las bibliotecas TR1 ya incluidas.

C++ 11 ha adoptado una biblioteca sólida de números aleatorios basada en boost.random.Puede acceder a varios motores de números aleatorios utilizando diferentes algoritmos para cumplir con sus requisitos de calidad, velocidad o tamaño.Las implementaciones de calidad incluso brindarán acceso a cualquier RNG no determinista que ofrezca su plataforma a través de std::random_device.

Además existen muchos adaptadores para producir distribuciones específicas, eliminando la necesidad de hacer dicha manipulación a mano (algo que muchas veces se hace de forma incorrecta).

#include <random>

Boost.Random es mi primera opción para RNG

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top