1. 程式人生 > >高質量的c++隨機數生成方法

高質量的c++隨機數生成方法

       隨機數用的場合非常多,比如卷積神經網路演算法中,初始的卷積核權值就是隨機數;影象處理上的柏林噪聲,要用到隨機數;微信搶紅包嘛,誰搶的多、誰搶的少,拼人品、拼手氣,其實拼的是程式背後的隨機數。如果覺得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;
}

       程式執行結果如下: