1 | //! \file ranlux.h |
---|
2 | |
---|
3 | #ifndef __RANLUX_H__ |
---|
4 | #define __RANLUX_H__ |
---|
5 | |
---|
6 | /* This is a lagged fibonacci generator with skipping developed by Luescher. |
---|
7 | The sequence is a series of 24-bit integers, x_n, |
---|
8 | |
---|
9 | x_n = d_n + b_n |
---|
10 | |
---|
11 | where d_n = x_{n-10} - x_{n-24} - c_{n-1}, b_n = 0 if d_n >= 0 and |
---|
12 | b_n = 2^24 if d_n < 0, c_n = 0 if d_n >= 0 and c_n = 1 if d_n < 0, |
---|
13 | where after 24 samples a group of p integers are "skipped", to |
---|
14 | reduce correlations. By default p = 199, but can be increased to |
---|
15 | 365. |
---|
16 | |
---|
17 | The period of the generator is around 10^171. |
---|
18 | |
---|
19 | From: M. Luescher, "A portable high-quality random number generator |
---|
20 | for lattice field theory calculations", Computer Physics |
---|
21 | Communications, 79 (1994) 100-110. |
---|
22 | |
---|
23 | Available on the net as hep-lat/9309020 at http://xxx.lanl.gov/ |
---|
24 | |
---|
25 | See also, |
---|
26 | |
---|
27 | F. James, "RANLUX: A Fortran implementation of the high-quality |
---|
28 | pseudo-random number generator of Luscher", Computer Physics |
---|
29 | Communications, 79 (1994) 111-114 |
---|
30 | |
---|
31 | Kenneth G. Hamilton, F. James, "Acceleration of RANLUX", Computer |
---|
32 | Physics Communications, 101 (1997) 241-248 |
---|
33 | |
---|
34 | Kenneth G. Hamilton, "Assembler RANLUX for PCs", Computer Physics |
---|
35 | Communications, 101 (1997) 249-253 */ |
---|
36 | |
---|
37 | namespace siscone{ |
---|
38 | |
---|
39 | /// initialize 'ranlux' generator |
---|
40 | void ranlux_init(); |
---|
41 | |
---|
42 | /// generate random value (24 bits) |
---|
43 | unsigned long int ranlux_get(); |
---|
44 | |
---|
45 | /// save state of the generator |
---|
46 | void ranlux_print_state(); |
---|
47 | |
---|
48 | } |
---|
49 | #endif |
---|