2017-10-27 6 views
0

したがって、オーバーロードされたかっこ演算子を使用して1から61の間の乱数を生成しようとしていますが、何らかの理由でコードを実行するたびに同じ結果が得られます。ここで範囲内で乱数を生成する

は、私が持っているものです。

double operator()() const { 
    std::uniform_int_distribution<int> _uniformIntDistribution(1, 61); 
    std::default_random_engine _generator; 

    double result;  
    result = _uniformIntDistribution(_generator); 

    return result; 
} 

ない私が間違ってやっていることを確認。助言がありますか?

ありがとうございます!

+0

同じ乱数ジェネレータを作成した場合、同じ開始種子を使用すると、毎回何が期待されましたか?乱数ジェネレータ***を一度作成し、毎回呼び出すだけでいいです。 –

+0

@SamVarshavchik待って、どこに種子を置いていますか?よくわかりません。それがどこにあっても間違いなく間違っています –

+0

@NomOnTheCookie **あなたは 'std :: default_random_engine'の種をセットするために失敗することはできません。あなたのデフォルトで構築された '_generator'はデフォルトの種を持っています – Caleth

答えて

0

コンパイラはコンパイルするたびにデフォルトのシードを使用します。つまり、同じ乱数シーケンスが使用されます。あなたのプログラムへの要求や、あなたの数字がどのように「ランダム」なのかによって、システムの現在時刻の値をシードとして使用することができます。コンパイルするたびにランダムなエンジン出力が変わります。ここにリンクがあります:Notice member function "seed"

+0

種子としての時間を使用することは本当に悪い習慣です –

+0

これは私が本やフォーラムで読んだものです。なぜ悪いのかを詳しく説明できますか?それは、同様の質問をしている人たちにもう少し役立つかもしれません。ありがとうございます – Adler11th

+0

問題はかなり関わっていますが、最良のシナリオでさえ、「ランダム」ではない数字が得られます。詳細については、[this](http://www.pcg-random.org/predictability.html)を参照してください。 –

関連する問題