-1

我想知道在 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() 函数得到的结果不匹配。

有人可以帮助我哪里错了,或者有什么我不知道的。

4

2 回答 2

0

看起来像是对 DES::SetKey(unsigned long long int); 的调用 在 stdlib.h 中不知道这是否与随机生成器函数有关,但您永远不知道,因为 DES 加密/解密算法有一个更快的版本,它曾经在旧版本中使用过GNUPG 实际上使用 DES 作为选择的加密/解密系统,所以这就是他们可能用来生成随机数的方法。

于 2014-12-06T13:52:55.917 回答
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

于 2012-12-20T18:44:55.200 回答