种子随机数生成器不工作

Seeding Random number generator not working

本文关键字:工作 随机数生成器 种子      更新时间:2023-10-16

我有一个c++程序,它使用随机生成器创建多维数据集。要创建多维数据集,我有这个:

void generateSquare() {
  int num = 0;
  srand(time(NULL));
  for (int r = 0; r < MSQUARE; r++) {
    for (int c = 0; c < MSQUARE; c++) {
      do {
        num = (rand() % (MSQUARE * MSQUARE)) + 1;
      } while (!checkUnique(num));
      cube[r][c] = num;
    }
  }
}

它只允许生成一个数字。然后,这个函数被包装在do..while循环中,这样,如果正方形不满足特定条件,就会生成一个新的正方形,直到生成满足条件的正方形。

问题是,它不断地一次又一次地生成同一个正方形。我以为srand(time(NULL))会为rand()函数播种,这样它每次都会生成不同的随机数,以在每次调用时创建一个新的唯一平方,但看起来并没有发生。

void checkSquare() {
  do {
    generateSquare();
  } while (!perfect);
}

这不是真正的do…while循环,而是让您了解它是如何被调用的。

如何确保每次种子都是独一无二的?

您应该只在程序开始时调用srand一次。您的种子总是相同的原因是因为time返回了秒数。由于您在循环中调用它,它总是具有相同的值(直到一秒钟过去)。

此外,如果您可以使用C++11或更高版本,您应该查看标准库中的伪随机数生成

srand设置rand函数的种子。如果你把它设置为一个特定的数字,它总是会给你返回相同的数字序列。如果你想测试一个程序,你会使用这个,否则你会使用rand()而不使用srand()。

http://www.cplusplus.com/reference/cstdlib/srand/