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