使用C ++ 11的<random>
标准函数/类/等如何在这些范围内生成随机数:
他们的特例:
或者可能有像<random>
的作弊表那样的文档?
答案 0 :(得分:9)
uniform_real_distribution
将提供[a, b)
范围内的值。我们可以使用std::nextafter
在开放和关闭范围之间进行转换。
int main() {
std::random_device rd;
std::mt19937 mt(rd());
// [1, 10]
std::uniform_real_distribution<> dist_a(1, std::nextafter(10, std::numeric_limits<double>::max));
// [1, 10)
std::uniform_real_distribution<> dist_b(1, 10);
// (1, 10)
std::uniform_real_distribution<> dist_c(std::nextafter(1, std::numeric_limits<double>::max), 10);
// (1, 10]
std::uniform_real_distribution<> dist_d(std::nextafter(1, std::numeric_limits<double>::max), std::nextafter(10, std::numeric_limits<double>::max));
// Random Number Generators are used like this:
for (int i=0; i<16; ++i)
std::cout << dist_d(mt) << "\n";
}
uniform_int_distribution
将提供[a, b]
范围内的值。我们可以添加和减去1
以在打开和关闭范围之间切换。
int main() {
std::random_device rd;
std::mt19937 mt(rd());
// [1, 10]
std::uniform_int_distribution<> dist_a(1, 10);
// [1, 10)
std::uniform_int_distribution<> dist_b(1, 10 - 1);
// (1, 10)
std::uniform_int_distribution<> dist_c(1 + 1, 10 - 1);
// (1, 10]
std::uniform_int_distribution<> dist_d(1 + 1, 10);
// Random Number Generators are used like this:
for (int i=0; i<16; ++i)
std::cout << dist_d(mt) << "\n";
}