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 */
|