Msvcrt.dll hace uso de un generador de congruencia lineal para su función rand ()?
Pregunta
Estoy tratando de predecir la salida de un programa que utiliza la función de msvcrt rand () para generar la cara de tres dados. Creo que el código es algo como:
dice[0] = rand() % 6 + 1; dice[1] = rand() % 6 + 1; dice[2] = rand() % 6 + 1;
, y me preguntaba si podría utilizar un programa de predicción para los generadores de congruencia lineal para predecir la siguiente números en la secuencia.
Solución
Vea por sí mismo: C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\rand.c
(O uso %VCINSTALLDIR%\crt\src\rand.c
si se está ejecutando desde un símbolo del sistema VC).
(Asumiendo que tiene al menos la versión estándar de VC. Se trata de dos líneas. Que había puesto, pero no está seguro de si la licencia lo permite.)
Otros consejos
Si falla la memoria, sí, es un generador de congruencia lineal - pero lo que devuelve es el resto de una producción mayor, lo que aumenta la dificultad de predecir el siguiente número (hasta el punto de que es probable que tenga una muestra mucho mayor de tres salidas que lo hagan de forma fiable).