我知道这是一个奇怪的问题,但我真的想知道srand()函数的背后是什么,仅仅是出于纯粹的好奇心.是否可以编写具有相同结尾或依赖于机器本身的C代码?谢谢您的帮助.XP
srand() 是一个功能.
其实现的细节可以从一个实施方式到另一个变化很大,但ISO C标准既提供的样本实现srand和rand.见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.
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |