C++ 随机数没有改变
C++ random number are not changing
我在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);
}
主要是这样的:
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
您在每次调用时都重新播种随机数生成器。因为您连续调用该函数,所以 time(NULL)
可能不会改变。您应该在程序开始时播种一次,可能在 CDevice
.
的构造函数中
我在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);
}
主要是这样的:
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
您在每次调用时都重新播种随机数生成器。因为您连续调用该函数,所以 time(NULL)
可能不会改变。您应该在程序开始时播种一次,可能在 CDevice
.