From: <dil...@us...> - 2014-03-31 22:56:01
|
Revision: 7006 http://sourceforge.net/p/freeorion/code/7006 Author: dilvish-fo Date: 2014-03-31 22:55:58 +0000 (Mon, 31 Mar 2014) Log Message: ----------- a fix for Seed() and ClockSeed() so that they also set the seed for the boost::uniform_01<GeneratorType> zero_to_one_gen, which is used by RandZeroToOne() Modified Paths: -------------- trunk/FreeOrion/util/Random.cpp Modified: trunk/FreeOrion/util/Random.cpp =================================================================== --- trunk/FreeOrion/util/Random.cpp 2014-03-30 14:05:03 UTC (rev 7005) +++ trunk/FreeOrion/util/Random.cpp 2014-03-31 22:55:58 UTC (rev 7006) @@ -7,12 +7,17 @@ boost::uniform_01<GeneratorType> zero_to_one_gen(gen); } -void Seed(unsigned int seed) -{ gen.seed(static_cast<boost::mt19937::result_type>(seed)); } +void Seed(unsigned int seed) { + gen.seed(static_cast<boost::mt19937::result_type>(seed)); + // unlike other distributions, uniform_01 makes its own copy of the generator it was instantiated with, so: + zero_to_one_gen.base().seed(static_cast<boost::mt19937::result_type>(seed)); +} void ClockSeed() { boost::posix_time::time_duration diff = boost::posix_time::microsec_clock::local_time().time_of_day(); gen.seed(static_cast<boost::mt19937::result_type>(diff.total_milliseconds())); + // unlike other distributions, uniform_01 makes its own copy of the generator it was instantiated with, so: + zero_to_one_gen.base().seed(static_cast<boost::mt19937::result_type>(diff.total_milliseconds())); } SmallIntDistType SmallIntDist(int min, int max) |
From: <geo...@us...> - 2014-06-19 21:36:19
|
Revision: 7169 http://sourceforge.net/p/freeorion/code/7169 Author: geoffthemedio Date: 2014-06-19 21:36:10 +0000 (Thu, 19 Jun 2014) Log Message: ----------- Reworked RandZeroToOne to use DoubleDist instead of special-case random generator in hope of avoiding reported odd Chance condition results. Modified Paths: -------------- trunk/FreeOrion/util/Random.cpp Modified: trunk/FreeOrion/util/Random.cpp =================================================================== --- trunk/FreeOrion/util/Random.cpp 2014-06-19 19:37:57 UTC (rev 7168) +++ trunk/FreeOrion/util/Random.cpp 2014-06-19 21:36:10 UTC (rev 7169) @@ -4,20 +4,15 @@ namespace { GeneratorType gen; // the one random number generator driving the distributions below - boost::uniform_01<GeneratorType> zero_to_one_gen(gen); } void Seed(unsigned int seed) { gen.seed(static_cast<boost::mt19937::result_type>(seed)); - // unlike other distributions, uniform_01 makes its own copy of the generator it was instantiated with, so: - zero_to_one_gen.base().seed(static_cast<boost::mt19937::result_type>(seed)); } void ClockSeed() { boost::posix_time::time_duration diff = boost::posix_time::microsec_clock::local_time().time_of_day(); gen.seed(static_cast<boost::mt19937::result_type>(diff.total_milliseconds())); - // unlike other distributions, uniform_01 makes its own copy of the generator it was instantiated with, so: - zero_to_one_gen.base().seed(static_cast<boost::mt19937::result_type>(diff.total_milliseconds())); } SmallIntDistType SmallIntDist(int min, int max) @@ -39,7 +34,7 @@ { return (min == max ? min : IntDist(min, max)()); } double RandZeroToOne() -{ return zero_to_one_gen(); } +{ return DoubleDist(0.0, 1.0)(); } double RandDouble(double min, double max) { return (min == max ? min : DoubleDist(min, max)()); } |