我想知道rand()在linux的gcc编译器中生成随机数的确切方法。

我想知道rand()在linux的gcc编译器中生成随机数的确切方法。,gcc,random,Gcc,Random,我想知道在linux的gcc编译器中生成随机数的确切方法 我知道在gcc中,线性同余生成器用于生成随机数,其一般公式为: X(n+1)=(a*X(n)+c)模m 我开始知道,使用的一般公式,有维基百科中给出的常量值: 它们是m=2^3,a=1103515245和12345 但是,在gcc中放置这些常数得到的结果与rand()函数得到的结果不匹配 有人能帮我找出哪里错了,或者有什么我不知道的。数字是否与此匹配: 否则,源代码如下所示: 这就导致了: 看起来像是对DES::SetKey(unsi

我想知道在linux的gcc编译器中生成随机数的确切方法

我知道在gcc中,线性同余生成器用于生成随机数,其一般公式为:

X(n+1)=(a*X(n)+c)模m

我开始知道,使用的一般公式,有维基百科中给出的常量值:

它们是m=2^3,a=1103515245和12345

但是,在gcc中放置这些常数得到的结果与rand()函数得到的结果不匹配

有人能帮我找出哪里错了,或者有什么我不知道的。

数字是否与此匹配:

否则,源代码如下所示: 这就导致了:

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

您使用的是常数种子吗?不清楚您所说的是哪一个rand()函数。gcc没有一个。它是一个编译器。rand()是一个库函数。stdlib中有一个实现,cstdlib中有一个实现。我想你说的是其中之一。据我所知,gcc通常使用的库都是开源的,所以查看源代码并了解它们是如何实现的应该很简单。