我是一位物理學家,編寫一個程序,涉及從高斯分佈中繪製幾個(數十億次)隨機數的程序。我正在嘗試使用C++ 11。這些隨機數的產生由一個應該花費很少時間的操作分開。我最擔心的是,如果我產生如此之多的隨機數字,這麼短的時間間隔,可能會導致次優的性能。我正在測試某些統計屬性,這些屬性在很大程度上依賴於數字隨機性的獨立性,因此,我的結果對這些問題特別敏感。我的問題是,我在代碼(我的實際代碼的簡化版本)中提到的那些數字類型,我是否明顯地(或者甚至是巧妙地)做錯了什麼?幾個隨機數C++
#include <random>
// Several other includes, etc.
int main() {
int dim_vec(400), nStats(1e8);
vector<double> vec1(dim_vec), vec2(dim_vec);
// Initialize the above vectors, which are order 1 numbers.
random_device rd;
mt19937 generator(rd());
double y(0.0);
double l(0.0);
for (int i(0);i<nStats;i++)
{
for (int j(0);j<dim_vec;j++)
{
normal_distribution<double> distribution(0.0,1/sqrt(vec1[j]));
l=distribution(generator);
y+=l*vec2[j];
}
cout << y << endl;
y=0.0;
}
}
使用你只需要一個分配對象,按隨機號一個也沒有。 – 2014-12-01 18:11:24
@ n.m。看起來每個索引都有不同的stddev,所以如果內存不是問題,它可能會更快地具有dim_vec分發對象而不是一個。 – IdeaHat 2014-12-01 18:19:10