2015-07-28 6 views
0

Я создал этот метод для генерации случайных чисел в C++, когда я вызываю его в цикле, я всегда получаю одно и то же случайное значение, что не так? Потому что я ожидаю различное значение после каждой итерации цикла. Я компилирую его с флагом -std = C++ 11.C++ случайное число не меняется

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 
+8

Видите это так много раз здесь ... инициализируйте свое случайное число, генерируя * вне * вашего цикла! Обычно * один раз * в начале вашего приложения. – crashmstr

+0

Тема -> «Reffer» о случайном числе http://stackoverflow.com/questions/5008804/generating-random-integer-from-a-range –

+0

Вы продолжаете спрашивать новый, одинаково настроенное ГСЧ, для его первый выход, когда вы хотите продолжать задавать тот же RNG для своих последовательных выходов. –

ответ

8

Вы переустановка генератора случайных чисел при каждом вызове. Поскольку вы постоянно вызываете функцию, time(NULL), вероятно, не изменяется. Вы должны посеять один раз в начале вашей программы, возможно, в конструкторе CDevice.

Смежные вопросы