产生32位随机数的问题

时间:2014-01-13 17:42:13

标签: c++ random 32-bit

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

#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

的最小和最大参数无效

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

1 个答案:

答案 0 :(得分:3)

试试这个:

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

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

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

ending(或最后一个)转换为int时,它变为-300000000。对于发行版,ending也变为max(),因此ending == distr.max()。使用std::numeric_limits<int>::min(),我们可以看到结果值可以适合int。