/* lran2.h * by Wolfram Gloger 1996. * * A small, portable pseudo-random number generator. */ #ifndef _LRAN2_H #define _LRAN2_H #define LRAN2_MAX 714025l /* constants for portable */ #define IA 1366l /* random number generator */ #define IC 150889l /* (see e.g. `Numerical Recipes') */ struct lran2_st { long x, y, v[97]; }; static void lran2_init(struct lran2_st* d, long seed) { long x; int j; x = (IC - seed) % LRAN2_MAX; if(x < 0) x = -x; for(j=0; j<97; j++) { x = (IA*x + IC) % LRAN2_MAX; d->v[j] = x; } d->x = (IA*x + IC) % LRAN2_MAX; d->y = d->x; } #ifdef __GNUC__ __inline__ #endif static long lran2(struct lran2_st* d) { int j = (d->y % 97); d->y = d->v[j]; d->x = (IA*d->x + IC) % LRAN2_MAX; d->v[j] = d->x; return d->y; } #undef IA #undef IC #endif