normal_distribution 関数が使用する乱数ジェネレーターの種類は何ですか?
科学シミュレーションアプリケーションに適していますか?
よろしく
std::normal_distribution
乱数の生成は行いません。乱数分布です。乱数分布は、乱数エンジンによって返された値のみをある種の分布にマップします。彼らは自分たちで何世代もしません。つまり、気になるのは乱数エンジンです。
標準で提供されている乱数エンジンの1つである、std::mersenne_twister_engine
は非常に高品質の乱数エンジンです。これを使用して、次のような正規分布の乱数を生成できます。
std::random_device rd;
std::mt19937 gen(rd()); // Create and seed the generator
std::normal_distribution<> d(mean, deviation); // Create distribution
std::cout << d(gen) << std::endl; // Generate random numbers according to distribution
std::mt19937
のであることtypedef
に注意してくださいstd::mersenne_twister_engine
。
<random>
標準ライブラリの要点は、乱数ジェネレータから分布を分離することです。均一な整数を生成する乱数ジェネレーターを提供すると、分布は、そのランダムで均一な整数シーケンスを目的の分布のサンプルに変換します。
幸い、<random>
ライブラリには乱数ジェネレータのコレクションも含まれています。特にメルセンヌツイスター(std::mt19937
)は、比較的優れた(つまり、高速で統計的に高品質な)ものです。
(ジェネレーターのシードも提供する必要があります。)