Números pseudoaleatorios constantes en todas las plataformas

Estoy buscando una forma de generar secuencias numéricas pseudoaleatorias que produzcan resultados de secuencia idénticos para una semilla dada a través de cualquier plataforma. Asumo que rand() / srand() no va a ser consistente (fácilmente podría equivocarme sobre esta suposición).

Algo como un Mersenne Twister (de Boost.Random) es determinista.

Knuth ha lanzado al dominio público el código fuente C (y FORTRAN) para el generador de números pseudoaleatorios descrito en la sección 3.6 de El arte de la progtwigción de computadoras .

Me doy cuenta de que este es un hilo viejo, pero ahora con C ++ 11 hay un montón de nuevas opciones disponibles . Aquí hay un ejemplo destilado de la página que por defecto usa el motor Mersenne Twister y Normal distribución Normal :

 #include  #include  #include  #include  #include  int main() { std::random_device rd; // // Engines // std::mt19937 e2(rd()); //std::knuth_b e2(rd()); //std::default_random_engine e2(rd()) ; // // Distribtuions // std::normal_distribution<> dist(2, 2); //std::student_t_distribution<> dist(5); //std::poisson_distribution<> dist(2); //std::extreme_value_distribution<> dist(0,2); std::map hist; for (int n = 0; n < 10000; ++n) { ++hist[std::round(dist(e2))]; } for (auto p : hist) { std::cout << std::fixed << std::setprecision(1) << std::setw(2) << p.first << ' ' << std::string(p.second/200, '*') << '\n'; } } 

He estado trabajando en una biblioteca simplerandom para esto. Se supone que es multiplataforma, y ​​también bash apuntar a múltiples idiomas. Actualmente es compatible con C y Python (los mismos números se generan en ambos idiomas). Planeo implementar los mismos generadores en C ++ pronto, siguiendo la API aleatoria de Boost y C ++ 11.

La forma más fácil sería escribir usted mismo un generador de números aleatorios, pero también podría funcionar el uso de una biblioteca que se lanza para diferentes plataformas y que garantiza los mismos resultados.

Dudo que rand () / srand () sea consistente, pero no lo sé.

Una referencia rápida en Google dice:

Dos inicializaciones diferentes con la misma semilla, instruyen al generador pseudoaleatorio para generar la misma sucesión de resultados para las llamadas subsiguientes a rand en ambos casos.

Pero la pregunta permanece. Supongo que la especificación anterior solo se aplica a los RNG dentro del mismo proceso. Lo más probable es que no especifique nada sobre cosas multiplataforma o de comstackción cruzada. Su mejor opción es encontrar una biblioteca que esté disponible para todas las plataformas deseadas. Entonces debería estar razonablemente seguro de que si se siembra con el mismo valor devuelven la misma secuencia de números.