项目过程中遇到需要使用随机数。于是研究了一下visual studio 随机数的机制。
可以收纳成公共方法的接口。
val 在区间【m,n):
(rand()%(n - m+1) ) + m
srand()设置随机数的种子
rand()伪随机数产生器,它是基于 “随机种子” 的线性随机。种子不同,随机数也不同。
一般使用的机制,以时间为种子。
srand(unsigned (time (null) ));
弊端:在1s内使用的时间种子是一样的,导致1s内产生的随机数是一样的。
相对更好的随机方式
LARGE_INTERGER seed;
//初始一个微妙级的时间种子
QueryPerformanceFrequency(&seed);
QeryPerformanceCounter(&seed);
srand(seed.QuadPart);
int randVal = rand();
MSDN说明:
typedef union _ULARGE_INTEGER {
struct {
DWORD LowPart;
DWORD HighPart;
};
struct {
DWORD LowPart;
DWORD HighPart;
} u;
ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;
struct {
DWORD LowPart;
DWORD HighPart;
};
struct {
DWORD LowPart;
DWORD HighPart;
} u;
ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;