msvcrt.dll是否为其rand()函数使用线性同余生成器?

时间:2009-12-19 01:40:26

标签: c++ random msvcrt dice

我正在尝试预测使用msvcrt的rand()函数生成三个骰子的程序的输出。我相信代码是这样的: dice[0] = rand() % 6 + 1; dice[1] = rand() % 6 + 1; dice[2] = rand() % 6 + 1;,我想知道我是否可以使用线性同余生成器的预测程序来预测序列中的下一个数字。

2 个答案:

答案 0 :(得分:4)

亲眼看看:C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\rand.c

(如果您从VC命令提示符运行,请使用%VCINSTALLDIR%\crt\src\rand.c。)

(假设你至少是VC的标准版。这是两行。我会发布它,但不确定许可证是否允许它。)

答案 1 :(得分:1)

如果内存服务,是的,它是一个线性同余生成器 - 但它返回的是更大输出的剩余部分,这增加了预测下一个数字的难度(可能需要比三个更大的样本产出可靠地完成)。