兰德()的gcc实现

兰德()的gcc实现,gcc,Gcc,我花了几个小时试图找到gcc中使用的rand()函数的实现。。。 如果有人能向我推荐包含其实现的文件或包含该实现的网站,我将不胜感激 顺便问一下,哪个目录(如果有必要的话,我正在使用Ubuntu)包含gcc编译器的c标准库实现?您将在项目中找到gcc使用的c库实现 您可以下载it源代码,您应该可以找到rand()implementation。具有函数定义的源代码通常不安装在Linux发行版上。只有我想您已经知道的头文件通常存储在/usr/include目录中 如果您熟悉GIT源代码管理,您可以执

我花了几个小时试图找到gcc中使用的rand()函数的实现。。。 如果有人能向我推荐包含其实现的文件或包含该实现的网站,我将不胜感激


顺便问一下,哪个目录(如果有必要的话,我正在使用Ubuntu)包含gcc编译器的c标准库实现?

您将在项目中找到gcc使用的c库实现

您可以下载it源代码,您应该可以找到
rand()
implementation。具有函数定义的源代码通常不安装在Linux发行版上。只有我想您已经知道的头文件通常存储在
/usr/include
目录中

如果您熟悉GIT源代码管理,您可以执行以下操作:

$ git clone git://sourceware.org/git/glibc.git
获取GLIBC源代码。

由一个函数调用组成,该函数大部分只调用在random\r.c中调用的另一个函数

请注意,上面的函数名是glibc源存储库的超链接,版本为2.28


glibc随机库支持两种生成器:一种是简单的生成器,另一种是更复杂的生成器。可以构造任意一个的实例,但在调用
rand
时使用的默认全局生成器使用线性反馈移位寄存器生成器(请参见的定义)。

文件可通过FTP获得。我发现在
stdlib
中使用了更多的
rand()
,它来自
[glibc][2]
。从中获得的(glibc-2.32.tar.gz)中,
stdlib
文件夹包含一个
random.c
文件,该文件说明使用了简单的线性同余算法。该文件夹还有
rand.c
rand\u r.c
,可以显示更多的源代码<包含在同一文件夹中的code>stdlib.h将显示用于宏的值,如
RAND_MAX

/*一个改进的随机数生成包。除了 标准的rand()/srand()类接口,此包还具有 特殊的状态信息接口。调用initstate()例程 使用一个种子、一个字节数组和一个字节数计数 被传入;然后初始化该数组以包含 具有如此多状态的随机数生成信息 信息。适用于状态信息量的大小如下 32、64、128和256字节。状态可以通过调用 setstate()函数的数组与初始化时使用的数组相同 initstate()。默认情况下,包以128字节的状态运行
信息和生成的随机数比线性的要好得多
同余发生器。如果状态信息量较少 超过32字节时,使用简单的线性同余R.N.G。 在内部,状态信息被视为一个长数组; 数组的第0个元素是所使用的R.N.G.类型 (小整数);数组的其余部分是状态 R.N.G.的信息因此,32字节的状态信息 将提供7个长值的状态信息,这将允许 七次多项式。(注:状态的第0个字
信息中还存储了一些其他信息;请参见设置状态 详细信息)。随机数生成技术是一种线性算法 反馈移位寄存器法,采用三项式(因为 这样总结的术语更少)。在这种方法中,至少 状态表中所有数字的有效位将用作 线性反馈移位寄存器,周期为2度-1 (其中deg是所用多项式的阶数,假设 多项式是不可约且本原的)。高阶 位将具有更长的周期,因为它们的值也是相同的 受低位伪随机执行的影响。
发电机的总周期约为度*(2<强>度-1);因此 将状态信息的数量增加一倍会对系统产生巨大的影响
发电机的周期。注:deg*(2deg-1)是一个 近似值仅适用于大度数,当偏移周期 语域是主导因素。deg等于7时,则 这个周期实际上比我们预测的7*(2**7-1)长得多 这个公式*/


GCC根本没有实现rand(),它是一个编译器,所有函数都来自libaries,在本例中来自glibc。它看起来可以在线性同余生成器和“fancier”(原文如此)算法之间进行选择。@ninjalj:你说得对,fancier是默认的。我错了。@BlueRaja DannyPflughoeft:谢谢;固定的。