2012-09-30 31 views
1

我正在學習並行計算,對於練習,我需要並行使用隨機數生成器。 但我似乎無法在子程序中使用RNG,因此它們會返回不同的數字。下面的代碼是我做的最簡單的測試,同時弄清楚如何做到這一點。 對於每次迭代它返回相同的數字,但我不知道爲什麼。你能解釋我不明白的嗎?C++ 11子函數中的隨機數發生器

#include <iostream> 
#include <random> 
void morerandom(double& num, double seednum) 
{ 
    std::mt19937 mt; 
    mt.seed(seednum); 
    std::uniform_real_distribution<double> ureal_d(0.,1.); 
    num = ureal_d(mt); 
} 


int main() 
{ 
    std::vector<double> nums = {0.1, 0.4, 0.3, 0.3, 0.1}; 
    std::vector<double> results(5,0.); 

    for (unsigned k=0; k<5; k++) 
    { 
     morerandom(results[k], nums[k]); 
     std::cout << results[k] << std::endl; 
    } 

    return 0; 
} 
+1

'seed'應該由'int'或其他_integral type_,由於從'double'轉換爲'int',您可能總是使用'0'作爲種子 –

+0

謝謝K-Ballo –

回答

3

的參數seed應由int或其它整體式,使用的是總是0作爲種子由於轉換從doubleint