0

Java乱数では、次のようになります

protected final static Random RANDOM = new Random(System.currentTimeMillis()); 

c ++でGMPライブラリを使用して乱数を生成するにはどうすればよいですか?

私は次のようなコードを使用しました

    gmp_randstate_t s;
unsigned long seed;
seed = time(NULL); 
gmp_randinit_default(s);
gmp_randseed_ui(s, seed);

mpz_class ran;
gmp_randclass rr(s);
ran =rr.get_z_bits(125);
long int random=ran.get_ui();

しかし、私は乱数を取得しません。

私を助けてください。

4

1 に答える 1

1

まず、インスタンスgmp_randclassを取るコンストラクターがないgmp_randstateため、コードがコンパイルされませんでした。a を構築する推奨される方法gmp_randclass instancegmp_randinit_defaultは、次のようにを使用することです。

gmp_randclass rr(gmp_randinit_default);

コードの最初の部分は をシードしていますgmp_randstate_t sが、そのランダムな状態変数 sはコードの 2 番目の部分 (上記の変更後) では使用されていません。別の方法でシードされていない限り、デフォルトの GMP 乱数ジェネレーターは常に同じシードで開始されます。つまり、プログラムを実行するたびに同じシーケンスの乱数が生成されます。gmp_randclass関数を使用してインスタンスをシードできますgmp_randclass::seed

次のコードはあなたのものと似ていますが、現在の時刻に基づいて乱数ジェネレーターをシードします。

mpz_class ran;
gmp_randclass rr(gmp_randinit_default);
rr.seed(time(NULL));
ran =rr.get_z_bits(125);
long int random=ran.get_ui();

Random State Seedingで説明されているように、低解像度の現在の時間を使用することは、通常、乱数ジェネレーターのシードとして不適切な選択であることに注意してください。

于 2012-08-01T20:11:36.563 に答える