C++mt19937总是给出相同的数字,即使在播种时也是如此
C++ mt19937 always giving same number, even when seeding
本文关键字:数字 C++mt19937 更新时间:2023-10-16
我目前遇到一个问题,我的RNG总是给我相同的数字,即使我(据说)每次都在播种值。
类中的代码是:
int RandomNumberGenerator()
{
std::mt19937 engine;
auto seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
engine.seed((unsigned long)seed);
std::uniform_int_distribution<int> distribution(0, 100);
return distribution(engine);
}
调用它的代码是:
vector<int> iv;
generate_n(back_inserter(iv), 5, RandomNumberGenerator);
cout << "nVector content: ";
copy(iv.begin(), iv.end(), ostream_iterator<int>(cout, " "));
当然,每次generate_n函数
好吧,您创建了不同的n
引擎,并用时钟值为它们播种。时钟很可能在generate_n()
运行时没有移动,所有引擎都以相同的值播种。
您应该对生成器进行一次种子设定并多次使用。
根据uniform_int_distribution 改编的示例
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(0, 100);
std::vector<int> vi;
std::generate_n(std::back_inserter(vi), 5, std::bind(dis, gen));
std::copy(begin(vi), end(vi), std::ostream_iterator<int>(std::cout, " "));
std::cout << 'n';
}
你可以看到它的实时
注意
有些人可能会说,您的代码确实返回了随机数:)
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 使用std::mt19937从字符串中返回一个随机单词
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 将数字打印成文字
- C++mt19937总是给出相同的数字,即使在播种时也是如此