C++ GNUC库中PRNG的周期是什么?

C++ GNUC库中PRNG的周期是什么?,c++,random,numbers,C++,Random,Numbers,在gcc的g++中是否有关于随机数生成器的周期性的文献(如果我们不重新设定函数的种子)?我想我可以自己进行测试,但最好能获得经过充分验证的研究 提前感谢你的帮助 //编辑 我只是想补充一点,我已经用多个引擎搜索了很多次,但是我没有找到任何具体的东西。我只读过关于周期性受到代表种子所需位数限制的一般性评论。(所以我想,考虑到srand通常是随时间调用的,周期可能不会超过10^12左右。但是在我开始实现算法之前,更明确的东西会非常有用。)srand/rand函数有点不完整。当你使用C++时,我强烈建

在gcc的g++中是否有关于随机数生成器的周期性的文献(如果我们不重新设定函数的种子)?我想我可以自己进行测试,但最好能获得经过充分验证的研究

提前感谢你的帮助

//编辑


我只是想补充一点,我已经用多个引擎搜索了很多次,但是我没有找到任何具体的东西。我只读过关于周期性受到代表种子所需位数限制的一般性评论。(所以我想,考虑到srand通常是随时间调用的,周期可能不会超过10^12左右。但是在我开始实现算法之前,更明确的东西会非常有用。)

srand/rand函数有点不完整。当你使用C++时,我强烈建议你使用Boost随机数库。它是一个只包含标题的库,所以您不需要构建任何内容。这里有一个如何使用它的示例。

在rand(3)手册页中搜索时,我发现:

中rand()和srand()的版本 LinuxC库使用相同的 随机数生成器为random() 和srandom()

因此,我查看了随机手册页,以下是您的答案:

这个随机数的周期 发电机非常大,大约 16*((2**31)-1)

这对于教学目的非常有用,因为您希望开发自己的PRNG。但是,我不鼓励您在开发应用程序时使用此PRNG。您应该更喜欢Boost.Random的一个实现,正如@Neil Butterworth所建议的那样(MT19937是一个很好的默认PRNG,对于大多数应用程序来说已经足够了)

最后,如果你想了解更多关于PRNG的信息,我建议你阅读这两篇关于PRNG的科学文章

随机高性能计算中随机流的实际分布,David RC Hill,高性能计算与仿真国际会议(HPCS),2010年

伪随机数生成器,Pierre L'Ecuyer,在《定量金融百科全书》中
2008年《定量金融百科全书》

如果你是指兰德公司(rand)/
//srand)
:那不是GCC的一部分,而是OS/C库的一部分。@Neil:你确定吗?GNU树上有不同的项目,gcc与其他libc配合得很好。当然,它们是打算一起进行的,并且通常一起发布,但这与作为单个项目或产品并不完全相同。“它们通常一起发布”——除了使用BSD libc的数以百万计的Mac上。。。。在微软Windows上,cygwin gcc使用
newlib
,Neil自己告诉我mingw gcc使用操作系统附带的MSVCRT.DLL。“它们通常一起发布”……在Linux上……其他人引用了Windows、MacOS和BSD;我将添加HP-UX、Solaris和AIX作为GCC通常不附带glibc的其他平台。在C++0x中,我们将使用
作为改进的PRNG,并且不需要增强。@Ben我们不要屏息以待。我认为界面是一样的?FWIW,--我不认为它会用完:)@pst:你错了,MT19937有一个2^19937-1的周期,这就解释了它的名字。关于从数字配方第三版生成随机数的章节也值得一读,而且是最新的(例如,它不提倡Mersene Twister)。我同意你的看法,我还可以加上克努特的《计算机编程的艺术》,第二卷。不过,我在回答中引用的两篇论文都比较短,并且都参考了这两本书。非常感谢你,查克瑟利普!