File: rng.h

package info (click to toggle)
nauty 2.4r2-1
  • links: PTS, VCS
  • area: non-free
  • in suites: wheezy
  • size: 2,540 kB
  • sloc: ansic: 30,296; sh: 2,545; makefile: 762
file content (37 lines) | stat: -rw-r--r-- 1,172 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/* rng.h : definitions for using Don Knuth's random number generator.

   To use it:
     1.  Call ran_init(seed) with any long seed.  (Optional,
	   but you will always get the same sequence otherwise.)
     2.  Use NEXTRAN to get the next number (0..2^30-1).
         Alternatively, use KRAN(k) to get a random number 0..k-1.
	 For large k, KRAN(k) is not quite uniform.  In that case
         use GETKRAN(k,var) to set the variable var to a better
         random number 0..k-1.

   Some of these definitions are also in naututil.h.
*/

#ifdef __cplusplus
extern "C" {
#endif

extern long *ran_arr_ptr;
long ran_arr_cycle(void);
void ran_init(long seed);
void ran_array(long *aa, int n);

#ifdef __cplusplus
}
#endif

#define MAXRAN (0x3fffffffL)    /* Values are 0..MAXRAN */
#define NEXTRAN (*ran_arr_ptr>=0 ? *ran_arr_ptr++ : ran_arr_cycle())
#define KRAN(k) (NEXTRAN%(k))
#define RANREAL ((NEXTRAN+0.5)/(MAXRAN+1.0))  /* Uniform (0,1) */

#define MAXSAFE(k) (((MAXRAN+1)/(k))*(k))
#define GETKRAN(k,var) {long __getkran; \
    do {__getkran = NEXTRAN;} while (__getkran >= MAXSAFE(k)); \
    var = __getkran % (k);}
#define INITRANBYTIME ran_init((long)time(NULL))