繁体   English   中英

播种随机数生成器不起作用

[英]Seeding Random number generator not working

我有一个使用随机生成器创建多维数据集的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函数的种子。 如果将其设置为特定的数字,它将始终返回相同的数字序列。 如果要测试程序,则将使用此方法,否则使用不带srand()的rand()。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM