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

C++ 如何找到C库中使用的确切rand()?,c++,c,random,sequence-generators,number-sequence,C++,C,Random,Sequence Generators,Number Sequence,作为我课程的一部分,我需要找到并重新编码一个兰德()随机数生成器,它输出与原始数相同的数。启动序列为1804289383 846930886 1681692777 1714636915 195774793 424238335 719885386 1649760492 596516649 1189641421 1025202362,可在以下位置生成: #包括/*rand*/ #包括 使用名称空间std; int main() { 对于(int i=0;i

作为我课程的一部分,我需要找到并重新编码一个兰德()随机数生成器,它输出与原始数相同的数。启动序列为1804289383 846930886 1681692777 1714636915 195774793 424238335 719885386 1649760492 596516649 1189641421 1025202362,可在以下位置生成:

#包括/*rand*/
#包括
使用名称空间std;
int main()
{
对于(int i=0;i<10;i++){

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

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

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

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

您可以在 如果您熟悉GIT,可以使用GIT源代码管理,如:

$> git clone git://sourceware.org/git/glibc.git
rand()函数本质上调用不同的函数,首先调用不同的函数,然后依次调用。单击函数名以参考版本2.15中的源存储库


有关更多详细信息,请参阅此处的答案-

我不确定我是否理解。您是在问如何找出默认种子是什么?还是需要知道
rand()
?rand()使用的算法是什么
不是标准化的-这取决于您的实现。如果您的问题是找到起始种子,那么请使用
srand()
-这样您就可以知道起始种子,并且可以在空闲时更改它。(请记住,通常只需要调用
srand()
)。我需要找到RNG算法。我已经搜索并找到了Eugene Sh.提供的链接,但它没有给我我正在寻找的解决方案。那里的生成器与我正在寻找的生成器不同。生成器在gcc 4.9.2中,但源代码让我感到困惑。我真的不明白这样一个赋值的意义。它必须至少包括算法名称或任何其他对“原始”的引用。
$> git clone git://sourceware.org/git/glibc.git