我正在尝试在 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:
==================================================== ==================
恐怕许多回复者都在为乘法和模运算而苦苦挣扎。这是一个错误,我已经删除了它。但关键是,即使这会在语义上影响结果,也不能让生成器给出否定的结果。