gpt4 book ai didi

c++ - 如何找到 C 库中使用的确切 rand()?

转载 作者:行者123 更新时间:2023-11-30 20:22:08 25 4
gpt4 key购买 nike

作为我类(class)作业的一部分,我需要找到并重新编码 rand() 随机数生成器,它输出与原始数字相同的数字。起始序列为 1804289383 846930886 1681692777 1714636915 1957747793 424238335 719885386 1649760492 596516649 1189641421 1025202362 和可以在 http://ideone.com/H7tsSI 生成

#include <stdlib.h>     /* rand */
#include <iostream>
using namespace std;

int main ()
{
for (int i = 0 ; i< 10 ; i++) {
cout << rand() << " ";
}
cout << rand();

return 0;
}

我的问题是我找不到这个生成器的原始来源,而且我不知道如何从生成器的完整序列(长度为 100 个数字)中找出生成器的工作方式。有人可以帮助我找到原始生成器或教我如何从其序列中找到生成器吗?谢谢!

最佳答案

根据您的特定编译器,您可能会获得可用的源代码。例如,在 Visual Studio 12.0 上,rand() 源代码为:

int __cdecl rand (
void
)
{
_ptiddata ptd = _getptd();

return( ((ptd->_holdrand = ptd->_holdrand * 214013L
+ 2531011L) >> 16) & 0x7fff );
}

如果您的编译器不包含其 C 库的源代码,您可以尝试使用反汇编程序来拼凑其版本的 rand() 函数的功能。一般来说,它们中的大多数都与上述代码相同:访问最后一次调用 rand() 的结果的状态变量(如果是第一次调用,则访问种子) ,对其执行排列,然后将其写回状态变量。

关于c++ - 如何找到 C 库中使用的确切 rand()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40686961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com