summaryrefslogtreecommitdiff
path: root/nauty/naurng.h
diff options
context:
space:
mode:
Diffstat (limited to 'nauty/naurng.h')
-rw-r--r--nauty/naurng.h41
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