我知道rand()
和srand()
如何相互关联,我知道如何使用它们,但是它们的工作机制对我来说真的很有趣,我想知道它们如何真正地工作?!但是,我无法找不到任何特别的东西。
所以这是我的问题:rand()
和srand()
的内部发生了什么,它如何产生随机数? (如果它确实产生随机数!)它是否具有任何特殊的数学计算或特殊的算法?它是什么?
最佳答案
首先,rand()
不产生随机数。它是Pseudo Random Number Generator。rand()
通常实现为linear congruential generator。
您可以认为存在一个变量seed
,该变量保存生成器的先前状态,然后rand()
仅使用该种子来生成序列中的下一个数字。
这样的事情(非常粗略的实现,只是为了解释这个想法):
const int RAND_MAX = 32767; // usually it is 2^15, but actually implementation specific
const int a = ...; // implementation specific
const int c = ...; // implementation specific
int seed = 0; // current generator state
void srand(int _seed) {
seed = _seed;
}
int rand() {
int r = (a * seed + c) % RAND_MAX;
seed = r;
return r;
}
它将为相同的初始状态(种子值)创建相同的序列。
关于c++ - C++更深入地了解rand()和srand(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57933816/