C++;随机数不变 我在C++中创建了随机数的生成方法,当我把它称为循环时,总是得到相同的随机值,有什么不对吗?因为我期望在每次循环迭代后得到不同的值。我用flag-std=c++11编译它 float CDevice::gaussNoise(float mean, float stddev) { std::default_random_engine generator(time(NULL)); std::normal_distribution<float> distribution(mean, stddev); return distribution(generator); }

C++;随机数不变 我在C++中创建了随机数的生成方法,当我把它称为循环时,总是得到相同的随机值,有什么不对吗?因为我期望在每次循环迭代后得到不同的值。我用flag-std=c++11编译它 float CDevice::gaussNoise(float mean, float stddev) { std::default_random_engine generator(time(NULL)); std::normal_distribution<float> distribution(mean, stddev); return distribution(generator); },c++,c++11,random,gaussian,C++,C++11,Random,Gaussian,你在每次通话中都给随机数发生器重新设定了种子。由于连续调用函数,time(NULL)可能不会更改。您应该在程序开始时播种一次,可能是在CDevice的构造函数中在这里看到过很多次。。。初始化你的随机数,在你的循环外生成!通常在应用程序开始时进行一次。主题->“reffer”关于随机数,当您想继续要求相同的RNG进行连续输出时,您会不断要求一个新的、配置相同的RNG进行第一次输出。我一定是个傻瓜。谷歌搜索“C++随机数不变”提供了大量链接(但幸运的是,这不是谷歌百科)。 int main {

你在每次通话中都给随机数发生器重新设定了种子。由于连续调用函数,
time(NULL)
可能不会更改。您应该在程序开始时播种一次,可能是在
CDevice的构造函数中

在这里看到过很多次。。。初始化你的随机数,在你的循环外生成!通常在应用程序开始时进行一次。主题->“reffer”关于随机数,当您想继续要求相同的RNG进行连续输出时,您会不断要求一个新的、配置相同的RNG进行第一次输出。我一定是个傻瓜。谷歌搜索“C++随机数不变”提供了大量链接(但幸运的是,这不是谷歌百科)。
int main
{
    class CDevice *device;
    device = new CDevice();
    std::vector<float> vec;
    for(uint32_t i = 0; i< 10; ++i)
        vec.push_back(device->gaussNoise(1,5));
    for(uint32_t i = 0; i < vec.size(); ++i)
            std::cout << vec[i] << std::endl;
}
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254