2017-06-13 91 views
-3

我正在尝试在main()函数中使用std :: uniform_real_distribution。在主我打电话进一步上在主函数中使用std :: uniform_real_distribution

unsigned seed = 
std::chrono::system_clock::now().time_since_epoch().count(); 
std::default_random_engine generator (seed); 
std::uniform_real_distribution<double> distribution(0.0,1.0); 

我播种发生器在main()如下

double number = distribution(generator) 

当我需要的随机数。

问题是,我还需要(数百万) 随机数的函数。

想象我在调用一个函数main():

int main(){ 

    void function(){ 

    number = distribution(generator) 
    } 

    return 0; 
} 

如何做到这一点?如何在函数中“访问”随机数生成器。

非常感谢!

+5

你把它传递给函数? – NathanOliver

+1

不要使用时间作为种子,这不是随机的。不要使用'std :: default_random_engine',这通常是不好的([示例](https://stackoverflow.com/q/21843172/3002139))。你可以在我的问题[https://codereview.stackexchange.com/q/109260/47293]中找到一种方法来正确地播种一个好的RNG。 –

回答

0

你可以制作一个功能。我建议使用std::mt19937作为随机数发生器,并使用(至少)std::random_device进行播种。

事情是这样的:

inline 
double random_number(double min, double max) 
{ 
    // use thread_local to make this function thread safe 
    thread_local static std::mt19937 mt{std::random_device{}()}; 
    thread_local static std::uniform_real_distribution<double> dist; 
    using pick = std::uniform_real_distribution<double>::param_type; 

    return dist(mt, pick(min, max)); 
} 

int main() 
{ 
    for(int i = 0; i < 10; ++i) 
     std::cout << i << ": " << random_number(2.5, 3.9) << '\n'; 
} 

输出:

1: 3.73887 
2: 3.68129 
3: 3.41809 
4: 2.64881 
5: 2.93931 
6: 3.15629 
7: 2.76597 
8: 3.55753 
9: 2.90251 
+0

谢谢!在阅读您的评论后,我做了类似的事情。 (有用!) – daniel

相关问题