forループで一様乱数を生成する必要があります。 forループは1000000の数字になります。その内部には2000というループがあります。したがって、2 * 10^9の一様乱数を生成します。私は以下の方法を使用します:C++で一様乱数を作成する最も速い方法は
#include <random>
double zeta;
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
auto uniform_rand = bind(uniform_real_distribution<double>(0,1), mt19937(seed));
for(int j=0; j<1000000; j++)
for(int i=0; i<2000; i++)
zeta=-eta/2.0+uniform_rand()*eta; // in the range (-eta/2, +eta/2)
theta[i]+=zeta;
end
end
'std :: bind'は、可読性とパフォーマンスの両面でlambdasによってoutclassされがちです。 – chris
これはひどい乱数です。その数が必要な場合は、これをスレッドに分割して複数のコアを使用してみましょう。 – tadman
申し訳ありませんが、何を意味するのか分かりませんでした@ tadman –