我想知道用于在linux的gcc编译器中生成随机数的确切方法。
我知道线性同余生成器用于生成gcc中的随机数,其具有通式:
X(n + 1)=(a * X(n)+ c)mod m
我开始知道使用的通用公式具有维基百科中给出的这些常数值: http://en.wikipedia.org/wiki/Linear_congruential_generator
,其中m = 2 ^ 3,a = 1103515245和12345
但是通过放置这些常量获得的结果与gcc中rand()函数获得的结果不匹配。
有人可以在我错的地方帮助我,或者有些我不知道的事情。
答案 0 :(得分:0)
这些数字是否匹配: http://www.mathstat.dal.ca/~selinger/random/
否则,源代码在这里: http://sourceware.org/git/?p=glibc.git;a=blob;f=stdlib/rand.c;h=92916e833f7fc94ac16a2bd047c33f8a6ef6ec49;hb=HEAD 这导致: http://sourceware.org/git/?p=glibc.git;a=blob;f=stdlib/random.c;h=ff6bdd2b5d5a8f7633a914282f4c6ab1991df0cf;hb=HEAD
答案 1 :(得分:0)
看起来像是对DES :: SetKey的调用(unsigned long long int);在stdlib.h中不知道这是否与随机生成器功能有关,但你永远不知道,因为有一个更快版本的DES加密/解密算法,这个算法曾经用过旧的实际上使用DES作为加密/解密系统的GNUPG版本,因此这可能是他们用来生成随机数的原因。