1. 程式人生 > >C++中 概率均勻分佈

C++中 概率均勻分佈

c++11提供的均勻分佈模板類為:uniform_int_distribution 和 uniform_real_distribution。

#include<iostream>  
#include<random>  
#include<time.h>  
   
using std::cout;  
using std::endl;  
using std::cin;  
   
   
int main()  
{  
    std::default_random_engine random(time(NULL));  
    std::uniform_int_distribution<int> dis1(0, 100);  
   std::uniform_real_distribution<double> dis2(0.0, 1.0);  
   
    for(int i = 0; i < 10; ++i)  
        cout<<dis1(random)<<' ';  
    cout<<endl;  
   
    for(int i = 0; i < 10; ++i)  
        cout<<dis2(random)<<' ';  
    cout<<endl;  
   
    return 0;  
} 

C++11中提供的均勻分佈模板類為:unfiorm_int_distribution 和 unifrom_real_distribution。前一個模板類名字中的int不是代表整型,而是代表整數。因為它是模板類,可以用int、long、short等整數型別來例項化,後一個表示浮點數模板類,可以用float和double來例項化。

    可以看到,在uniform_int_distribution的建構函式中,引數說明隨機數的範圍。unirom_int_distribution 的隨機數的範圍不是半開範圍[),而是[],對於uniform_real_distribution卻是半開範圍[)。也就是說 上面的例子中可以產生100,但不會產生1.0。

對於default_random_engine來說,其產生得隨機數範圍在[min(),max()]之間,其中min()和max()為它的兩個成員函式。同樣,也是半開範圍。對於浮點數,如果真的是向產生[0.0,1.0]範圍的數,可以使用

#include<cmath>  
#include<cfloat>  
std::uniform_real_distribution<double> dis2(0, std::nextafter(1,DBL_MAX)); 

如果uniform_int_distribution使用了無參建構函式,那麼其隨機數的範圍是[0,numberic_limits<type>::max()],也就是0到對應例項化型別能表示的最大值。對於uniform_real_distribution的無參建構函式,則是[0, 1)。

概率分佈型別:

均勻分佈:uniform_int_distribution          

 浮點數均勻分佈 :uniform_real_distribution        

內容參考引用自 https://blog.csdn.net/wsf0001/article/details/50392811