高質量的c++隨機數生成方法
阿新 • • 發佈:2019-02-10
隨機數用的場合非常多,比如卷積神經網路演算法中,初始的卷積核權值就是隨機數;影象處理上的柏林噪聲,要用到隨機數;微信搶紅包嘛,誰搶的多、誰搶的少,拼人品、拼手氣,其實拼的是程式背後的隨機數。如果覺得c++自帶的rand()生成的隨機數不理想,想使用高質量的快速隨機數產生器boost::mt19337,但又沒有安裝boost庫,然後又不想用c++ 11,那怎麼辦?用下面這個吧,這個應該和boost::mt19337是一樣的,但本人沒有具體去驗證。下面是程式碼示例,用法非常簡單,設定隨機種子後,就可以各種使用了。
#include "stdafx.h" #include <stdlib.h> #include <time.h> #include "mt19937ar.h" int main() { // 系統自帶隨機數生成 printf("default...\n"); srand((unsigned int)time(NULL)); for (int i = 0; i < 10; i++) { printf("%d: %d\n", i, rand()); } // mt19937隨機數生成 printf("\nmt19937...\n"); init_genrand((unsigned long)time(NULL)); for (int i = 0; i < 10; i++) { printf("%d: %f %d\n", i, genrand_real1(), genrand_int31()); } system("pause"); return 0; }
程式執行結果如下: