Esempio n. 1
0
int * rdNum() { // 랜덤으로 사원번호를 생성하는 함수
	int * ran;
	ran = (int*)calloc(MAX, sizeof(int));
	int i;

	srand((unsigned)time(NULL));
	unsigned int init[32];
	for (int i = 0; i<32; i++) {
		init[i] = rand() << 16 | rand();
		// WELL Random 을 초기화 하기 위해, C 표준 rand() 함수를 이용하여 init 값을 생성합니다
		// WELL Random 을 사용하는 이유 1. 사원번호 최대값이 99999이기 때문에 2. 표준 함수보다 속도가 빠르기 때문에
	}
	InitWELLRNG1024a(init); // WELL Random 초기화
				// 기본 사용법 - min ~ max 범위의 난수
				//double x = (double)WELLRNG1024a() * (max-min+1) + min; 

	//사원번호의 중복을 방지하기 위해 MAX크기의 배열에 1부터 99999까지의 숫자를 차례대로 넣은 후 카드 섞기 방식으로 난수 배열 생성.
	for (i = 0; i<MAX; i++)
	{
		ran[i] = i+1;
	}

	srand((unsigned)time(NULL));

	int rana;

	for (i = 0; i<MAX; i++)
	{
		rana = (int)((double)WELLRNG1024a() * (MAX-i+1)) + i;
		int prev;

		prev = ran[i];
		ran[i] = ran[rana];
		ran[rana] = prev;

	}

	return ran;

}
Esempio n. 2
0
void	well_random_engine_test()
{
	unsigned int init[1391] = { 0, };
	for( int i = 0; i < sizeof( init )/sizeof( init[0] ); ++i )
	{
		init[i] = rand();
	}
	
	#define MASK32  0xffffffffU
	#define JMAX 16

	init[0] = 123456789;
	for( int i = 1; i < JMAX; ++i )
		init[i] = (663608941 * init[i - 1]) & MASK32;



	InitWELLRNG512a( init );
	InitWELLRNG1024a( init );
	InitWELLRNG19937a( init );
	InitWELLRNG44497a( init );
	g_rand();

	{
		DWORD start = GetTickCount();
		for( int i = 0; i < total_rand_count; ++i )
		{
			double r = g_rand.gen();
			r;
		}
		DWORD runing = GetTickCount() - start;
		std::wcout << L"g_rand run time: " << runing << std::endl;
	}

	{
		DWORD start = GetTickCount();
		for( int i = 0; i < total_rand_count; ++i )
		{
			double r = WELLRNG512a();
			r;
		}
		DWORD runing = GetTickCount() - start;
		std::wcout << L"WELL512 run time: " << runing << std::endl;
	}

	{
		DWORD start = GetTickCount();
		for( int i = 0; i < total_rand_count; ++i )
		{
			double r = WELLRNG1024a();
			r;
		}
		DWORD runing = GetTickCount() - start;
		std::wcout << L"WELL1024 run time: " << runing << std::endl;
	}

	{
		DWORD start = GetTickCount();
		for( int i = 0; i < total_rand_count; ++i )
		{
			double r = WELLRNG19937a();
			r;
		}
		DWORD runing = GetTickCount() - start;
		std::wcout << L"WELL19937 run time: " << runing << std::endl;
	}

	{
		DWORD start = GetTickCount();
		for( int i = 0; i < total_rand_count; ++i )
		{
			double r = WELLRNG44497a();
			r;
		}
		DWORD runing = GetTickCount() - start;
		std::wcout << L"WELL44497 run time: " << runing << std::endl;
	}

}