2017-10-14 41 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