1 /* lran2.h 2 * by Wolfram Gloger 1996. 3 * 4 * A small, portable pseudo-random number generator. 5 */ 6 7 #ifndef _LRAN2_H 8 #define _LRAN2_H 9 10 #define LRAN2_MAX 714025l /* constants for portable */ 11 #define IA 1366l /* random number generator */ 12 #define IC 150889l /* (see e.g. `Numerical Recipes') */ 13 14 struct lran2_st { 15 long x, y, v[97]; 16 }; 17 18 static void lran2_init(struct lran2_st * d,long seed)19lran2_init(struct lran2_st* d, long seed) 20 { 21 long x; 22 int j; 23 24 x = (IC - seed) % LRAN2_MAX; 25 if(x < 0) x = -x; 26 for(j=0; j<97; j++) { 27 x = (IA*x + IC) % LRAN2_MAX; 28 d->v[j] = x; 29 } 30 d->x = (IA*x + IC) % LRAN2_MAX; 31 d->y = d->x; 32 } 33 34 #ifdef __GNUC__ 35 __inline__ 36 #endif 37 static long lran2(struct lran2_st * d)38lran2(struct lran2_st* d) 39 { 40 int j = (d->y % 97); 41 42 d->y = d->v[j]; 43 d->x = (IA*d->x + IC) % LRAN2_MAX; 44 d->v[j] = d->x; 45 return d->y; 46 } 47 48 #undef IA 49 #undef IC 50 51 #endif 52