Uniform random integer generation (by rejection sampling).
authorDariusz Murakowski <murakdar@mit.edu>
Thu, 16 Jul 2015 04:11:49 +0000 (00:11 -0400)
committerDariusz Murakowski <murakdar@mit.edu>
Thu, 16 Jul 2015 04:11:49 +0000 (00:11 -0400)
mtrnd.h

diff --git a/mtrnd.h b/mtrnd.h
index e74c18d..501e891 100644 (file)
--- a/mtrnd.h
+++ b/mtrnd.h
@@ -183,6 +183,17 @@ public:
         unsigned long a=genrand_int32()>>5, b=genrand_int32()>>6; 
         return(a*67108864.0+b)*(1.0/9007199254740992.0); 
     }
+
+    /* generates a random number on [low,high] closed interval */
+    int uniform_int_closed(int low, int high)
+    {
+        const unsigned long MT_RAND_MAX = 0x7fffffff;
+        int range = high - low + 1;
+        int secureMax = 1 + (MT_RAND_MAX - MT_RAND_MAX % range);
+        int x;
+        do x = genrand_int31(); while (x > secureMax);
+        return low + x % range;
+    }
 };
 }
 #endif