OpenMPI  0.1.1
lran2.h
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
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
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
Definition: lran2.h:14