⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rg_rand.c

📁 国外网站上的一些精典的C程序
💻 C
字号:
/***  longrand() -- generate 2**31-2 random numbers****  public domain by Ray Gardner** **  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),**  and "Two Fast Implementations of the 'Minimal Standard' Random**  Number Generator", David G. Carta, Comm. ACM 33, 1 (Jan 1990), p. 87-88****  linear congruential generator f(z) = 16807 z mod (2 ** 31 - 1)****  uses L. Schrage's method to avoid overflow problems*/#define a 16807         /* multiplier */#define m 2147483647L   /* 2**31 - 1 */#define q 127773L       /* m div a */#define r 2836          /* m mod a */long nextlongrand(long seed){      unsigned long lo, hi;      lo = a * (long)(seed & 0xFFFF);      hi = a * (long)((unsigned long)seed >> 16);      lo += (hi & 0x7FFF) << 16;      if (lo > m)      {            lo &= m;            ++lo;      }      lo += hi >> 15;      if (lo > m)      {            lo &= m;            ++lo;      }      return (long)lo;}static long randomnum = 1;long longrand(void)                     /* return next random long */{      randomnum = nextlongrand(randomnum);      return randomnum;}void slongrand(unsigned long seed)      /* to seed it */{      randomnum = seed ? (seed & m) : 1;  /* nonzero seed */}#ifdef TEST#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){      long reps, k, num;      unsigned long seed;      reps = 10000;      seed = 1;      /*      ** correctness test: after 10000 reps starting with seed 1,      ** result should be 1043618065      */          if (argc > 1)            reps = atol(argv[1]);      if (argc > 2)            seed = atol(argv[2]);      printf("seed %ld for %ld reps...\n", seed, reps);      slongrand(seed);      for (k = 0; k < reps; ++k)            num = longrand();      printf("%ld\n", num);      return 0;}#endif /* TEST */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -