【发布时间】:2015-09-09 19:14:47
【问题描述】:
我正在尝试使用随机库。我知道这里有一个类似的问题:std::uniform_real_distribution inclusive range。从我读过的内容来看,它应该是 [0, 10)。我尝试拥有 [0, 10] 但我已经尝试了解决方案,但它对我不起作用。我不知道为什么。这是一段代码。
std::vector<int> vec;
int main()
{
const int min = 0;
const int max = 10;
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(min, std::nextafter(max, INT_MAX));
const int MAX = 10;
for (int i = 0; i < MAX; i++)
{
int t = dis(gen);
vec.push_back(t);
}
for (auto& i : vec)
std::cout << i << std::endl;
system("pause");
return 0;
}
我试过了:
std::uniform_real_distribution<> dis(min, std::nextafter(max, INT_MAX));
std::uniform_real_distribution<> dis{ 0, 10 };
std::uniform_real_distribution<> dis(min, max);
它只随机生成 0 到 9,并且不包括我想要的 10。我正在开发 VS2013。
【问题讨论】:
-
实际分布应该是某种浮点数,而不是整数。起床 9.99999 而永远不会 10.0000 是一种明显的可能性,当填充到
int t时将被截断为 9@ -
你真的想要
uniform_int_distribution吗?[0, 10]上的uniform_real_distribution产生 10 的机会...非常小。 -
换句话说:你说你想要的东西在统计上与你已经拥有的东西没有区别。