📄 rg_rand.c
字号:
/*
** random.c -- "Minimal Standard" integer random number generator
**
** based on "Random Number Generators: Good Ones Are Hard to Find",
** S.K. Park and K.W. Miller, Communications of the ACM 31:10 (Oct 1988).
**
** linear congruential generator f(z) = 16807 z mod (2 ** 31 - 1)
**
** uses L. Schrage's method to avoid overflow problems
**
** adapted for C by R. Gardner, public domain
*/
static long int z = 1;
#define a 16807
#define m 2147483647 /* 2 ** 31 - 1 */
#define q (m / a)
#define r (m % a)
long random (void) /* returns number in [1 .. 2147483646] */
{
long int lo, hi, test;
hi = z / q;
lo = z % q;
test = a * lo - r * hi;
if (test > 0)
z = test;
else z = test + m;
return z;
}
void srandom(unsigned int seed) /* set the seed */
{
if (seed == 0)
seed = 1;
z = seed;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -