生成 32 位随机数时出现问题

problems generating 32 bit random numbers

本文关键字:问题 随机数 生成      更新时间:2023-10-16

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

#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

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

试试这个:

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

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

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

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