diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2023-08-13 01:27:00 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2023-08-13 06:00:02 -0500 |
| commit | 58acff54b1cd64cb23b9d0b1a304eb9db768e3eb (patch) | |
| tree | 87281f776e0015f218aadb5cbfdad43c66406342 /nauty/naurng.h | |
Initial commit
Diffstat (limited to 'nauty/naurng.h')
| -rw-r--r-- | nauty/naurng.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/nauty/naurng.h b/nauty/naurng.h new file mode 100644 index 0000000..876a1c4 --- /dev/null +++ b/nauty/naurng.h @@ -0,0 +1,41 @@ +/* naurng.h : definitions for using Don Knuth's random number generator. + This version uses the attribute TLS_ATTR from nauty.h. + + 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. +*/ + +#ifndef NAURNG_H +#include "naututil.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern void ran_init(long seed); +extern long ran_init_time(long extra); +extern long ran_nextran(void); + +#ifdef __cplusplus +} +#endif + +#define MAXRAN (0x3fffffffL) /* Values are 0..MAXRAN */ +#define NEXTRAN (ran_nextran()) +#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_time(0) + +#define NAURNG_H +#endif |