srand背后的功能是什么?

Gor*_*say 0 c random srand

我知道这是一个奇怪的问题,但我真的想知道srand()函数的背后是什么,仅仅是出于纯粹的好奇心.是否可以编写具有相同结尾或依赖于机器本身的C代码?谢谢您的帮助.XP

Kei*_*son 5

srand() 一个功能.

其实现的细节可以从一个实施方式到另一个变化很大,但ISO C标准既提供的样本实现srandrand.见N1570第7.22.3节:

static unsigned long int next = 1;
                 // RAND_MAX assumed to be 32767
int rand(void)
{
      next = next * 1103515245 + 12345;
      return (unsigned int)(next/65536) % 32768;
}
void srand(unsigned int seed)
{
      next = seed;
}
Run Code Online (Sandbox Code Playgroud)

重要的是要注意,这在任何意义上都不是和函数实现; 它只是一种可能的实现,由标准作为示例提供.randsrand

注意rand(),对于传递给给定种子的调用产生的"随机"(实际上是伪随机)数字的序列srand()是固定的.这是故意的; 它允许您使用相同的种子为程序重现相同的行为.这些功能通常不适用于需要高质量伪随机数的应用.

有关更多信息,请参阅优秀的comp.lang.c常见问题解答,尤其是问题13.15到13.21.