This repository has been archived by the owner on Jan 30, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathprng.h
53 lines (41 loc) · 1.38 KB
/
prng.h
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
// Probabilistic Random Number Generators
// Collected from various sources by Graham Cormode, 2000-2003
//
#include <math.h>
#ifndef _PRNG
#define MOD 2147483647
#define HL 31
extern long hash31(long long, long long, long long);
extern long fourwise(long long, long long, long long, long long, long long);
#define KK 17
#define NTAB 32
typedef struct prng_type{
int usenric; // which prng to use
float scale; /* 2^(- integer size) */
long floatidum;
long intidum; // needed to keep track of where we are in the
// nric random number generators
long iy;
long iv[NTAB];
/* global variables */
unsigned long randbuffer[KK]; /* history buffer */
int r_p1, r_p2; /* indexes into history buffer */
int iset;
double gset;
} prng_type;
#define _PRNG 1
#endif
extern long prng_int(prng_type *);
extern float prng_float(prng_type *);
extern prng_type * prng_Init(long, int);
extern void prng_Destroy(prng_type * prng);
void prng_Reseed(prng_type *, long);
//extern long double zipf(double, long) ;
extern double fastzipf(double, long, double, prng_type *);
extern double zeta(long, double);
extern double prng_normal(prng_type * prng);
extern double prng_stable(prng_type * prng, double);
//extern double stable(double); // stable distributions
//extern double stabledevd(float) ;
//extern long double stabledevl(float) ;
//extern double altstab(double);