生成随机数时,人们首先调用srand(int seed)
来生成种子,然后调用rand(void)
。
我的问题是为什么不直接使用单个函数rand(int seed)
。
C标准有引用,我不明白,说
该实现应该表现得好像没有库函数调用srand函数。
我不确定这是否与此声明有关。
该标准还给出了一个示例实现,我不明白使用静态变量的原因:
static unsigned long int next = 1;
int rand(void) // RAND_MAX assumed to be 32767
{
next = next * 1103515245 + 12345;
return (unsigned int)(next/65536) % 32768;
}
void srand(unsigned int seed)
{
next = seed;
}
答案 0 :(得分:3)
每次拨打srand
时,都不应该致电rand
。事实上,这是一个非常糟糕的主意,因为同一个种子每次都会给你相同的序列:你最终会产生一个恒定的值。
srand
。在典型的情况下,它只是在程序开始时的一次。
从那时起,对rand
的每次调用都将返回序列中的下一个数字。这就是为什么这里有一个静态变量的原因:rand
可以拾取之前离开的位置并生成下一个数字。