The R Project SVN R

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4562 pd 1
/* only used by ../main/random.c  & ../nmath/{snorm,sunif}.c
3076 pd 2
 */
3
#ifndef RANDOM_H
4
#define RANDOM_H
5
 
6
typedef unsigned long Int32;/* how is this done on 64-bit archtictures? */
7
 
8
typedef enum {
9
    WICHMANN_HILL,
10
    MARSAGLIA_MULTICARRY,
11
    SUPER_DUPER,
12
    RAND,
13
    MERSENNE_TWISTER,
14
} RNGtype;
15
 
3609 pd 16
/* Different kind of "N(0,1)" generators :*/
17
typedef enum {
18
    AHRENS_DIETER,
19
    KINDERMAN_RAMAGE,
20
} N01type;
21
 
3076 pd 22
typedef struct {
23
    RNGtype kind; /* above enum: 0,1,2... */
3609 pd 24
    N01type Nkind;
3076 pd 25
    char *name; /* print name */
26
    int is_seeded; /* False(0), True(1) */
27
    int n_seed; /* length of seed vector */
28
    Int32 i1_seed;
29
    Int32 *i_seed;
30
} RNGTAB;
31
#define i2_seed i_seed[0]
32
#define i3_seed i_seed[1]
33
 
34
/* .Random.seed == (RNGkind, i1_seed, i_seed[0],i_seed[1],..,i_seed[n_seed-2])
35
 *		                      i2_seed   i3_seed
36
 */
37
void MaybeAllocSeeds(RNGtype);
38
void Randomize(RNGtype);
39
void FixupSeeds(RNGtype);
40
void RNG_Init(RNGtype kind, long seed);
41
 
42
extern RNGTAB  RNG_Table[];
43
extern RNGtype RNG_kind;
44
 
45
#endif