Utilicé MT19937
en un arnés de prueba para generar valores uniformes (sin signo) de 32 bits [0, - 1], basados en la implementación original mt19937.c de los Autores , para generar un suministro (esencialmente inagotable) de flujo estadísticamente aleatorio de bit-octetos. Esto es en lugar de un CSPRNG, que no es necesario para estas pruebas en particular. Sin embargo, recientemente he estado considerando los PRNG, no debido a las propiedades estadísticas como tales (ambos parecen más que adecuados para mis necesidades), sino que parecen sugerir una implementación más eficiente.WELL
Me falta el trasfondo matemático para los trabajos académicos, aunque al menos podría seguir la matriz de 'giro' y la transformación de templado para el primero. Sin embargo, gran parte del código proporcionado por los Autores de las WELL-n
funciones parece centrarse en la generación de punto flotante, con algunas constantes mágicas de punto flotante (p 2.32830643653869628906e-10
. Ej .). ¿Se pueden omitir los pasos del WELL
código para proporcionar una distribución uniforme de 32 bits? ¿O el algoritmo está diseñado / sesgado específicamente para distribuciones de punto flotante?
¿O estoy equivocado al pensar que WELL
producirá una ganancia de rendimiento para la generación de vectores uint32 'masiva', al tiempo que satisface mis requisitos?
PCG
RNG. Son mucho más rápidos, pueden suministrar períodos muy largos (así como múltiples flujos) con propiedades estadísticamente excelentes, y parecen recuperarse muy rápidamente de IVs pobres.