frand.c

来自「一维等离子体静电粒子模拟程序」· C语言 代码 · 共 35 行

C
35
字号
float frand(void);/************************************************************************//* irand(iseed) returns values 1 through 2**31-2.                       *//* From "Random number generators: good ones are hard to find", S. Park *//* and K. Miller, Communications of ACM, October 1988, pp 1192-1201.    *//* This is from page 1195, and is to work on any system for which       *//* maxint is 2**31-1 or larger. Due earlier to Schrage, as cited by P&M.*//*                                                                      *//* Note: OK values for iseed are 1 through 2**31-2. Give it 0 or 2*31-1 *//* and it will return the same values thereafter!                       *//*                                                                      *//* C version 6/91, Bruce Langdon.                                       *//*                                                                      *//* Algorithm replaces seed by mod(a*seed,m). First represent            *//* seed = q*hi + lo.  Then                                              *//* a*seed = a*q*hi + lo = (m - r)*hi + a*lo = (a*lo - r*hi) + m*hi,     *//* and new seed = a*lo - r*hi unless negative; if so, then add m.       */float frand(void){  long a = 16807, m = 2147483647, q = 127773, r = 2836;  long hi, lo;  static long seed=31207321;  float fnumb;  hi = seed/q;  lo = seed - q*hi;  seed = a*lo - r*hi;  /* "seed" will always be a legal integer of 32 bits (including sign). */  if(seed <= 0) seed = seed + m;  fnumb = seed/2147483646.0;  return(fnumb);}

⌨️ 快捷键说明

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