种子随机数生成器不工作
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函数的种子。如果你把它设置为一个特定的数字,它总是会给你返回相同的数字序列。如果你想测试一个程序,你会使用这个,否则你会使用rand()而不使用srand()。
http://www.cplusplus.com/reference/cstdlib/srand/
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 制作具有平均值的随机数生成器
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 尝试在 c++ 中创建随机数生成器并收到错误
- 存储并重新加载随机数生成器状态
- 作为随机数生成器的争用条件
- 播种随机数生成器以使用分叉的好方法是什么?
- 随机数生成器的性能因平台而异
- 随机数生成器的种子和状态有什么区别?
- RcppShark 随机森林示例引发有关随机数生成器的异常
- C++多个实例的随机数生成器组种子中增强
- C++随机数生成器仅生成 0 - C++ 11
- GSL+OMP:C++中的线程安全随机数生成器
- 贪吃蛇游戏 - 食物瓷砖的随机数生成器
- 随机数生成器在 C++ 用于 skipList.
- RSA 加密和解密期间的随机数生成器要求
- 如何使用 cpp 设置随机数生成器的语法?
- 如何让随机数生成器正常工作
- 种子随机数生成器不工作
- 随机数生成器min和max-bounded,不工作