2016-05-23 20 views
-4

私はCで乱数を生成するためにrand()を使うことができ、srand()を使って種を設定できることを知っています。 しかし、今私は独立したランダムジェネレータ(変数のような、またはクラスを定義する)が欲しいです。Cの独立ランダムジェネレータ


独立した乱数生成器とは、プログラム内にランダム性を使用する複数の部分があることを意味します。 srand()を使ってある部分のシードを変更すると、他の部分のランダム性に影響が出ます。だからこそ私は独立した構造体がランダム性を制御したいと思っています。 私はこれを見た:

unsigned long next=1; 
int rand(void) /* NOT RECOMMENDED (see text) */ 
{ 
    next = next*1103515245 + 12345; 
    return (unsigned int)(next/65536) % 32768; 
} 
void srand(unsigned int seed) 
{ 
    next=seed; 
} 

がより良い方法はありますか?

+1

「独立ランダムジェネレータ」とはどういう意味ですか?詳しく教えてください。 –

+1

あなたの研究はこの討論された話題に役立つものは何も載せていませんか? –

+0

実際の乱数が必要な場合は、高価なハードウェアが必要になります。 –

答えて

0

あなたが記述している概念は、時々ランダムストリームまたはランダム同期と呼ばれています。

あなたが簡単に自分で何かを構築することもできますが、私は多くの異なった高品質のPRNGともこのランダムストリーム -settingに使いやすい良い抽象インタフェースを持っているGnu Scientific Libraryを、お勧めします。

上記のリンクは、今後の使用のためにRNGオブジェクトが作成される例です。あなたの場合、複数のランダムストリームを作成し、これらをコードのさまざまな部分で使用します。したがって、各ランダムストリームは、このランダムストリームが正確に呼び出された場合(および他のものの用途に依存しない場合)にのみ変更されます(内部状態)。