BASE: Fix genrand to generate both 0s and 1s when max equals one.

previously was only generating 0s.
This commit is contained in:
Ali Saidi 2010-08-23 11:18:39 -05:00
parent 7793773809
commit 7d191366e1

View file

@ -65,7 +65,9 @@ Random::~Random()
uint32_t uint32_t
Random::genrand(uint32_t max) Random::genrand(uint32_t max)
{ {
int log = ceilLog2(max); if (max == 0)
return 0;
int log = ceilLog2(max) + 1;
int shift = (sizeof(uint32_t) * 8 - log); int shift = (sizeof(uint32_t) * 8 - log);
uint32_t random; uint32_t random;
@ -79,7 +81,9 @@ Random::genrand(uint32_t max)
uint64_t uint64_t
Random::genrand(uint64_t max) Random::genrand(uint64_t max)
{ {
int log = ceilLog2(max); if (max == 0)
return 0;
int log = ceilLog2(max) + 1;
int shift = (sizeof(uint64_t) * 8 - log); int shift = (sizeof(uint64_t) * 8 - log);
uint64_t random; uint64_t random;