summaryrefslogtreecommitdiff
path: root/numlib/rand.h
blob: 0339b24e19b782d954b0f04bb1f006fed834cace (plain)
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#ifndef RAND_H
#define RAND_H

/*
 * Copyright 1998 Graeme W. Gill
 * All rights reserved.
 *
 * This material is licenced under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3 :-
 * see the License.txt file for licencing details.
 */

#ifdef __cplusplus
	extern "C" {
#endif

/* - - - - - - - - - - - - - - - */
/* Global state random generator */

/* Return a random number between 0 and 4294967294 */
unsigned int
rand32(						/* Return 32 bit random number */
unsigned int seed);			/* Optional seed. Non-zero re-initialized with that seed */

/* Return a random integer in the range min to max inclusive */
int i_rand(int min, int max);

/* Return a uniform random double in the range min to max inclusive */
double d_rand(double min, double max);

/* Return a squared distribution random double in the range min to max inclusive */
double d2_rand(double min, double max);

/* Return a random floating point number with a gausian/normal */
/* distribution, centered about 0.0, with standard deviation 1.0 */
/* and an average deviation of 0.564 */
double norm_rand(void);

/* - - - - - - - - - - - - - - - */
/* Explicit state random generator */
/* Use NULL for global state */

#define RAND_TSIZE 2843      	/* Prime */
#define RAND_SEED 0x12345678    /* Default seed */

/* Should set to 0 to default intialize */
typedef struct {
	int pvs_inited;
	unsigned int ran, last;
	unsigned int pvs[RAND_TSIZE];

	/* normal distribution 2nd value */
	int r2;			/* 2nd value available */
	double nr2;		/* 2nd value */
} rand_state;

/* Init rand_state to default */
void rand_init(rand_state *p);

/* Return a random number between 0 and 4294967294 */
unsigned int
rand32_th(rand_state *p,
unsigned int seed);			/* Optional seed. Non-zero re-initialized with that seed */

/* Return a random integer in the range min to max inclusive */
int i_rand_th(rand_state *p, int min, int max);

/* Return a uniform random double in the range min to max inclusive */
double d_rand_th(rand_state *p, double min, double max);

/* Return a squared distribution random double in the range min to max inclusive */
double d2_rand_th(rand_state *p, double min, double max);

/* Return a random floating point number with a gausian/normal */
/* distribution, centered about 0.0, with standard deviation 1.0 */
/* and an average deviation of 0.564 */
double norm_rand_th(rand_state *p);

#ifdef __cplusplus
	}
#endif

#endif /* RAND_H */