From: Dariusz Murakowski Date: Thu, 16 Jul 2015 04:11:49 +0000 (-0400) Subject: Uniform random integer generation (by rejection sampling). X-Git-Url: http://src.murakowski.org/?a=commitdiff_plain;h=72ff623baccc6ab5256f235642230a9bd0cbf2fb;p=VirEvoDyn.git Uniform random integer generation (by rejection sampling). --- diff --git a/mtrnd.h b/mtrnd.h index e74c18d..501e891 100644 --- 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