【问题标题】:Restrict random number generation to a range using <random> [duplicate]使用 <random> 将随机数生成限制在一个范围内 [重复]
【发布时间】:2013-07-13 21:18:23
【问题描述】:

我在 C++11 中生成随机数。当我运行我的代码时

using namespace std;

static std::mt19937_64 rng;

int main() {
rng.seed(11);

    std::cout << rng() << std::endl;
}

它返回随机数。但是,我想将其限制在一个数字范围内,比如 1-1000。我将如何使用 C++11 中引入的新 &lt;random&gt; 文件/库来做到这一点?

【问题讨论】:

  • 使用模组运算符%
  • 如果你想让它们均匀分布,en.cppreference.com/w/cpp/numeric/random/…
  • @andre 不,模数运算符不会生成均匀分布的数字,请查看:cplusplus.com/reference/cstdlib/rand
  • 试试this question——注意它是一种不同的语言,所以不是 dup(尽管这些答案会很好)。
  • % 严格来说是不正确的,看到这一点,假设完整的范围是 [0, 100) 如果你想 % 80 这个范围内的随机数,结果将不再是一致的分布式。

标签: c++ c++11 random


【解决方案1】:

使用来自&lt;random&gt;std::uniform_int_distribution

例子:

#include <random>
#include <iostream>

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<int> dis(1, 1000);

    std::cout << dis(gen) << '\n';
}

&lt;random&gt; 标头包含许多您可以使用的其他发行版。你可以去看看here

【讨论】:

  • +1 用于轻松适应其他类型的分布,这与我评论中的思考过程不同。
  • 哇,感谢代码和一切!
  • 另外,我如何将这个随机数存储为变量?
  • @user2581872 我没有收到任何错误。你可能想把它作为一个单独的问题。
  • @user2581872:多次调用:foo = dis(gen); bar = dis(gen);
猜你喜欢
  • 1970-01-01
  • 2014-05-15
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2015-06-05
相关资源
最近更新 更多