Park-Miller乱数生成アルゴリズムを実装するためのC++プログラム
Park-Miller乱数生成アルゴリズムは、乱数を生成するもう1つの方法です。
このタイプの乱数ジェネレーター(RNG)の一般式は、次のとおりです。X_ {k + 1} =g X(k)mod n
モジュラスnが素数または素数の累乗である場合、乗数gはnをモジュロする高乗法の要素であり、シードX0はnと互いに素です。
アルゴリズム
Begin Declare variables n, a, b, c and seed Read variables n, a, b, c and seed Uniform() Declare variable hi, lo, t hi=seed divided by b lo = seed - b * hi t = a * lo - c * hi if (t > 0) seed = t; else seed = t + n; return seed; Done For i =0 to n Call the function random Done End
サンプルコード
#include <iostream> using namespace std; const long n = 2145678965L; const long a = 763214L; const long b = 88844L; const long c = 7766L; i static long seed = 12345678L; double uniform() { long hi = seed / b; long lo = seed - b * hi; long t = a * lo - c * hi; if (t > 0) seed = t; else seed = t + n; return seed; } int main(int argc, char **argv) { double A[10]; for (int i = 0; i < 10; i++) A[i] = uniform(); cout << "Random numbers are:\n"; for (int i = 0; i < 10; i++) cout << A[i] << endl; }
出力
Random numbers are: 6.50293e+10 4.27187e+10 2.1539e+10 4.62058e+10 1.70792e+10 8.24569e+09 5.93381e+10 3.63839e+10 4.81931e+10 8.91007e+09
-
乱数を生成するC++プログラム
C++を使用して乱数を生成する方法を見てみましょう。ここでは、0からある値の範囲のランダムな数値を生成しています。 (このプログラムでは、最大値は100です。) この操作を実行するために、srand()関数を使用しています。これはCライブラリにあります。関数voidsrand(unsigned int seed) 関数randで使用される乱数ジェネレーターをシードします 。 srand()の宣言は以下のようになります void srand(unsigned int seed) シードと呼ばれるパラメータを取ります。これは、疑似乱数ジェネレータアルゴリズムによってシードとして使用される整数
-
配列シャッフリング用のFisher-Yatesアルゴリズムを実装するC++プログラム
Fisher-Yatesアルゴリズムは、配列要素のランダムな順列を生成します。つまり、配列のすべての要素をランダムにシャッフルします。フィッシャー-イェーツアルゴリズムは偏りがないため、配列のすべての順列は同じように発生する可能性があります。 C++で配列シャッフルするためのFisher-Yatesアルゴリズムを実装するプログラムは次のとおりです- 例 #include <iostream> #include <t;stdlib.h> using namespace std; int main() { int n;