我知道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/

10-10 11:24