例子:
int rand_value = RandomNext(0, INT32_MAX);
实现:
int RandomNext(volatile unsigned int* seed) noexcept
{
unsigned int next = *seed;
int result;
next *= 1103515245;
next += 12345;
result = (unsigned int)(next / 65536) % 2048;
next *= 1103515245;
next += 12345;
result <<= 10;
result ^= (unsigned int)(next / 65536) % 1024;
next *= 1103515245;
next += 12345;
result <<= 10;
result ^= (unsigned int)(next / 65536) % 1024;
*seed = next;
return result;
}
int RandomNext(int min, int max) noexcept
{
static thread_local volatile unsigned int seed = (unsigned int)(GetTickCount() / 1000);
int v = RandomNext(&seed);
return v % (max - min + 1) + min;
}