我不知道这是怎么回事。我所知道的是它是一个产生随机数的函数。
所以你可以向我解释这整段代码。 这是K& R C编程语言第2版书中的第46页。
unsigned long int next = 1;
/* rand: return pseudo-random integer on 0..32767 */
int rand(void)
{
next = next * 1103515245 + 12345; /*What the heck is this line doing?????? */
return (unsigned int) (next/65536) % 32768; /*This line, too, I have no idea.. */
}
/* srand: set seed for rand() */
void srand(unsigned int seed)
{
next = seed;
}
答案 0 :(得分:0)
此随机数生成器包含LCG,它们是Xn + 1(下一个元素)= aXn + c mod m(Xn是当前元素)的算法。然后从种子的第二位开始取15位作为输出。在LCG中,每个数字都是通过将状态数乘以常数,将其加到常数并将其模数为常数来生成的,这将决定输出的大小。