2011-12-24 20 views
0

メルセンヌ・ツイスターを使ってcで乱数(0と1の間の)を生成したい。メルセンヌ・ツイスターを使ったCの乱数生成

は、forループの乱数の各反復で
for (i=1; i<=10;i++){ 
    srand(time(NULL)); 
    a=rand(); 
    b=rand(); 
    c=rand(); 
} 

すなわち、現在の時刻を播種され、この種で、私が使用してこれを行うにはどのように0と1の間の3つの乱数を生成します。次のように私のコードですメルセンヌトワイスター?

+1

サンプルコードは[Wikipediaの記事](http://en.wikipedia.org/wiki/Mersenne_twister#Pseudocode)で、本質的にあります。 –

+0

Wikipediaの回答とそれが指しているサンプルコードよりさらに多くの情報が必要ですか? – Mark

+0

あなたのコードからの乱数は、0と1の間にあるのですか?彼らはそうではありません! – pmg

答えて

7

頻繁にRNGを再配分するのは良い考えのようではありません。ほとんどの場合、毎回同じタイムスタンプでシードします。この場合、各ループ反復で同じ3つの乱数が得られます。むしろ一度播種してから使用してください。メルセンヌツイスターの

A C-実装がhere利用可能です。

+0

私はシステムをシミュレートしています。 forループの各反復は、システムの1回の実行(またはサンプル)です。私はサンプルを独立させたい。それで、それぞれの反復で異なる値を持つRNGをシードしたいのです。 –

+7

あなたはいつも同じ値でPRNGを再シードすることによってあなたの意図を覆してしまいます。時間を使うつもりならば、 'time()'のような秒単位ではなく、情報がナノ秒であるものを使う必要があります。それでも、種子が異なっているのに十分な時間が経過していることを確認する必要があります。 –