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)19 lran2_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)38 lran2(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