Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;随机数总是一样的_C++_Random - Fatal编程技术网

C++ C++;随机数总是一样的

C++ C++;随机数总是一样的,c++,random,C++,Random,我目前一直在运行时生成随机数。在Java中,我只需调用Math.random(),我就差不多完成了(我只需要一个简单的RNG)。在C++中,我尝试了几种生成随机数的方法,并且总是得到相同的。 目前,我使用以下方法获得最小值和最大值之间的随机数: unsigned int getRandomNumber(int min, int max){ std::mt19937 mt(1729); std::uniform_int_distribution<int> dist(mi

我目前一直在运行时生成随机数。在Java中,我只需调用Math.random(),我就差不多完成了(我只需要一个简单的RNG)。在C++中,我尝试了几种生成随机数的方法,并且总是得到相同的。 目前,我使用以下方法获得最小值和最大值之间的随机数:

unsigned int getRandomNumber(int min, int max){
    std::mt19937 mt(1729);
    std::uniform_int_distribution<int> dist(min, max);
    return dist(mt);
}
无符号整数getRandomNumber(整数最小值,整数最大值){
标准:mt19937 mt(1729);
标准:均匀分布距离(最小值、最大值);
返回区(mt);
}
我有一个对象,它在构造函数中调用这个函数,并将返回的值赋给属性。我目前创建了这个对象的五个实例,随机数总是相同的。设置大范围(1-1000)不会改变这一点。号码总是一样的。安全性不是一个问题,它是一个非常简单的应用程序。

无符号int-getRandomNumber(int-min,int-max){
unsigned int getRandomNumber(int min, int max){
    static std::mt19937 mt(1729);
    std::uniform_int_distribution<int> dist(min, max);
    return dist(mt);
}
静态标准:mt19937 mt(1729); 标准:均匀分布距离(最小值、最大值); 返回区(mt); }
使
mt
静态将导致它只实例化一次,这意味着它将只被构造一次,这意味着它将只被播种一次。即使使用此修复程序,每次运行程序时仍然会得到相同的数字序列,但每次在一次执行中调用
getRandomNumber
时,它们都会不同

一个更好的解决方案是在别处实例化
mt
变量,并将其作为参数传递给此函数,这样您就可以管理如何使用更多的代码而不仅仅是构造函数调用。通常,您会使用基于时间的值进行种子设定。很多细节。

无符号整数getRandomNumber(整数最小值,整数最大值){
静态标准:mt19937 mt(1729);
标准:均匀分布距离(最小值、最大值);
返回区(mt);
}
使
mt
静态将导致它只实例化一次,这意味着它将只被构造一次,这意味着它将只被播种一次。即使使用此修复程序,每次运行程序时仍然会得到相同的数字序列,但每次在一次执行中调用
getRandomNumber
时,它们都会不同


一个更好的解决方案是在别处实例化
mt
变量,并将其作为参数传递给此函数,这样您就可以管理如何使用更多的代码而不仅仅是构造函数调用。通常,您会使用基于时间的值进行种子设定。非常有洞察力。

随机数生成器与。基本上,它是一个随机数生成器只设置一次的数字。如果您每次尝试生成一个数字时都对随机数生成器重新设定种子,则每次都会得到相同的数字。您应该只创建一次
std::mt19937
对象。

随机数生成器与。基本上,它是一个随机数生成器只设置一次的数字。如果您每次尝试生成一个数字时都对随机数生成器重新设定种子,则每次都会得到相同的数字。您应该只创建一次
std::mt19937
对象。

每次为随机数生成器提供相同的种子值。只需在节目中点击一次,谢谢链接!每次为随机数生成器提供相同的种子值。只需在节目中点击一次,谢谢链接!