最近閑來無事,發現做一個咸魚就是好,想做什么做什么。可能碼農做久了,還是無法擺脫技術的思維。接了個小活,其中涉及到需要用到C++實現概率分布--0-1均勻分布和標准正態分布,雖然很簡單,還是記下來,以備后用。
均勻分布:
在不設置種子的情況下,rand()函數可以產生偽隨機序列,但是區間不是我們想要的,因此需要簡單的轉換一下。
產生0-1之間(保留4位小數)均勻分布:
rand()%10000/10000.0:這個產生的概率分布范圍[0.0000, 0.9999]
同理,產生a-b之間的均勻分布:
rand()%(b-a+1) +a
標准正態分布:
該分布在C++11中已經提供,代碼如下:
#include<chrono> #include<ctime> unsigned seed = std::chrono::system_clock::now().time_since_epoch().count(); std::default_random_engine generator(seed); // 第一個參數為高斯分布的平均值,第二個參數為標准差 std::normal_distribution<double> distribution(0.0, 1.0); // p為概率,服從N~(0,1)標准正態分布 double p = distribution(generator);
