2017-10-14 2 views
0

を実行たとえば一様乱数は全て同じであり、私は以下のように範囲(AA、BB)に一様乱数の生成方法を見つける

#include <random> 
double randnum (double aa, double bb) //defining a function to create random numbers 
{ 
    static std::default_random_engine generator; 
    std::uniform_real_distribution<double> distribution (aa,bb); 
    return distribution(generator); 
} 
    int main(){ 
for (i=1;i<50;i++){ 
    cout<< randnum(0,1); 
} 
    } 

を、randnum(0,1)。 0と1の間の乱数を作成します。問題は、異なる実行中にforループで作成したランダムシーケンスがまったく同じことです。異なるランで異なる乱数を作成するにはどうすればよいですか?

+3

あなたはシードをリセットし、発電機に各呼び出しを再作成します。 –

+0

どうすればそれを避けることができますか? @Someprogrammerdude –

+1

ランダムなエンジンはペソランダムなので、エントロピーの外部ソースが必要です –

答えて

2

メルセンヌツイスターのように、よりパフォーマンス、確定的なものをシードする非決定論的乱数エンジンを使用します。

#include <iostream> 
#include <random> 

double randnum (double aa, double bb) { //defining a function to create random numbers 
    static std::random_device rd; // non-deterministic, but may be slow 
    static std::mt19937 engine{ rd() }; 
    std::uniform_real_distribution<double> distribution (aa,bb); 
    return distribution(engine); 
} 

int main() { 
    for(int i=1; i<50; i++) { 
     std::cout<< randnum(0,1); 
    } 
} 

https://ideone.com/dgvarY

+0

もちろん、私はそれを追加するのを忘れました。 – Jodocus

関連する問題