Does msvcrt.dll use a linear congruential generator for its rand() function?

北战南征 提交于 2019-12-13 06:30:48

问题


I am trying to predict the output of a program that uses msvcrt's rand() function for generating the face of 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.


回答1:


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.)




回答2:


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).



来源:https://stackoverflow.com/questions/1931656/does-msvcrt-dll-use-a-linear-congruential-generator-for-its-rand-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!