【问题标题】:Does msvcrt.dll use a linear congruential generator for its rand() function?msvcrt.dll 是否为其 rand() 函数使用线性同余生成器?
【发布时间】:2010-12-28 05:57:33
【问题描述】:

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

【问题讨论】:

  • 您可以转储DLL的相关位并自己查看生成器代码。
  • 为什么?您可以访问源代码——只有两行代码。
  • 我应该更频繁地挖掘这些东西。我什至没有意识到它在那里。

标签: c++ random msvcrt dice


【解决方案1】:

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

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

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

【讨论】:

  • %VCINSTALLDIR%\crt\src\rand.c 更通用。
  • 谢谢,这正是我所需要的。我经历了这一切只是为了发现我试图预测的程序不像我预测的那样工作(它在程序的其他各个部分调用 rand(),搞砸了我的种子)。
【解决方案2】:

如果没记错的话,是的,它是一个线性同余生成器——但它返回的是较大输出的余数,这增加了预测下一个数字的难度(以至于您可能需要比三个大得多的样本输出以可靠地执行此操作)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-22
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2019-11-29
    • 1970-01-01
    相关资源
    最近更新 更多