【问题标题】:problems generating 32 bit random numbers生成 32 位随机数的问题
【发布时间】:2014-01-13 17:42:12
【问题描述】:

我想在指定范围内生成一个随机数,但是当我运行以下代码时。它给出了错误,任何人都可以解释错误吗?

#include <iostream>
#include <random>
using namespace std;
unsigned long int starting=2347483648;
unsigned long int ending=3994967296;
unsigned int rand(unsigned long int first,unsigned long int last)
{
    std::random_device rd; 
    std::mt19937 eng(rd()); 
    std::uniform_int_distribution<> distr(first, last); 
    return  (unsigned int)distr(eng) << ' '; 
}
int main()
{
  cout<<rand(1,ending);//generate random number in this range
}

程序中断并给出错误

uniform_int 的最小和最大参数无效

解释错误原因并告诉我如何生成上述指定范围之间的随机数

【问题讨论】:

  • 如果我没记错的话,uniform_int_distribution 的默认模板参数是一个 int。并且 unsigned long int 不能放入 int。
  • 如果使用这些值 rand(starting,ending) 调用上述函数,它可以正常工作...
  • 我得说,问题的语气不太好..
  • 我不明白@fleetC0m ......我不是那个意思......只是在这里学习
  • 我不明白为什么投反对票。如果他们不熟悉uniform_int_distribution,这个问题可能会绊倒任何人。

标签: c++ random 32-bit


【解决方案1】:

试试这个:

    std::uniform_int_distribution<unsigned long int> distr(first, last); 
    return  (unsigned int)distr(eng); 
}

我还删除了错误的&lt;&lt; ' ',它使用空格字符左移,而不是在输出中附加空格。

int main()
{
  cout<<rand(1,ending) << " ";
}

ending(或最后一个)转换为int时,它变成-300000000ending 也变成了max() 用于分配,所以ending == distr.max()。使用std::numeric_limits&lt;int&gt;::min(),我们可以看到结果值可以适合 int。

【讨论】:

  • 是的,它可以工作,但你能解释一下为什么上面的代码在第一个参数为 1 时会出错,如果它是“开始”则运行
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 2013-06-03
  • 1970-01-01
相关资源
最近更新 更多