diff --git a/eo/src/utils/eoRNG.h b/eo/src/utils/eoRNG.h index 7c2e5b2a6..6fe52e016 100644 --- a/eo/src/utils/eoRNG.h +++ b/eo/src/utils/eoRNG.h @@ -151,7 +151,7 @@ public : */ double uniform(double m = 1.0) { // random number between [0, m] - return m * double(rand()) / double(rand_max()); + return m * double(rand()) / double(1.0 + rand_max()); } /** @@ -235,6 +235,15 @@ public : return --i; } + /** + * choice(vec), returns a uniformly chosen element from the vector + */ + template + const T& choice(const std::vector& vec) { return vec[rng.random(vec.size())]; } + + template + T& choice(std::vector& vec) { return vec[rng.random(vec.size())]; } + /// void printOn(std::ostream& _os) const {