《The GNU C Library》里说的,大概如下:
公式:
Y = (a * X + c) mod m
a,c,m 都是常数
一种取值是:
a = 0x5DEECE66D = 25214903917
c = 0xb = 11
m = 2^48
用上面的公式可以这样写:
__int64 rand ()
{
static __int64 r = 0;
const __int64 a = 25214903917;
const __int64 c = 11;
const __int64 m = 1 << 48;
r = (r * a + c) % m;
return r;
}
/***
*void srand(seed) - seed the random number generator
*
*Purpose:
* Seeds the random number generator with the int given. Adapted from the
* BASIC random number generator.
*
*Entry:
* unsigned seed - seed to seed rand # generator with
*
*Exit:
* None.
*
*Exceptions:
*
*******************************************************************************/
/***
*int rand() - returns a random number
*
*Purpose:
* returns a pseudo-random number 0 through 32767.
*
*Entry:
* None.
*
*Exit:
* Returns a pseudo-random number 0 through 32767.
*
*Exceptions:
*
*******************************************************************************/