【发布时间】:2013-09-05 12:24:45
【问题描述】:
我正在尝试在 C++ 中使用 uniform_real_distribution 来生成随机数数组。这是我的代码
#include <random>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int max_index = 48655;
vector<int> arr;
arr.resize(100);
std::random_device radm;
std::mt19937_64 mt(radm());
std::uniform_real_distribution<> distribution(0, max_index);
for(int i = 0; i < 100; i++)
{
arr[i] = int(distribution(mt)*(max_index-1))%(max_index-1);
}
return 0
}
问题是,虽然我已经明确指定随机数在0 和max_index 内是均匀分布的,但我的数组中仍然存在一些负数。并且它们的值是相同的(-2432)。
我可以知道我错了吗?
非常感谢。
编辑1:
================================================ =====================
恐怕很多回复者都在为乘法和模运算而苦恼。这是一个错误,我已经删除了它。 但关键是,即使这会在语义上影响结果,也不能让生成器给出否定的结果。
【问题讨论】:
-
您确定您正确验证了向量的内容吗?看起来您的代码不可能在具有 32 位
int的系统上产生负数(我认为这就是您所拥有的。)顺便说一句,乘法和模数的用途是什么? -
最重要的问题是为什么要对循环中的值进行乘法和取模?您需要的值范围是多少?为什么不在分布中指定它并完成它?
-
@Blastfurnace 那是个错误。我删除了它,因为我不再需要控制范围。无论如何,重点是为什么会有负值?