C++随机数没有变化

0 c++ random gaussian c++11

我创建了这个用c ++生成随机数的方法,当我在循环中调用它时,我总是得到相同的随机值,有什么问题?因为我希望在每次循环迭代后都有不同的值.我用标志-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);
}
Run Code Online (Sandbox Code Playgroud)

主要看起来像这样:

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;
}
Run Code Online (Sandbox Code Playgroud)

和输出是(例如):

3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
Run Code Online (Sandbox Code Playgroud)

yiz*_*lez 8

您在每次调用时重新设置了随机数生成器.因为你连续调用这个函数,所以time(NULL)可能不会改变.您应该在程序开始时播种一次,可能是在构造函数中CDevice.