Does msvcrt.dll use a linear congruential generator for its rand() function?
I am trying to predict the output of a program that uses msvcrt's rand() function for generating the face 开发者_StackOverflowof three dice. I believe the code is something like:
dice[0] = rand() % 6 + 1; dice[1] = rand() % 6 + 1; dice[2] = rand() % 6 + 1;
, and I was wondering if I could use a prediction program for linear congruential generators to predict the next numbers in the sequence.
See for yourself: C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\rand.c
(Or use %VCINSTALLDIR%\crt\src\rand.c
if you're running from a VC command prompt.)
(Assuming you have at least the standard version of VC. It's two lines. I'd post it, but not sure whether the license allows it.)
If memory serves, yes it's a linear congruential generator -- but what it returns is the remainder of a larger output, which increases the difficulty of predicting the next number (to the point that you probably need a much larger sample than three outputs to do so dependably).
精彩评论