00001 #include "stdafx.h"
00002 #include <cstdlib>
00003 #include <ctime>
00004 #include <cmath>
00005 #include "Random.h"
00006
00007 bool Random::haveNextNextGaussian = false;
00008 double Random::nextNextGaussian = 0;
00009
00010 void Random::setSeed( int seed )
00011 {
00012 srand(seed);
00013 }
00014
00015 void Random::setRandomSeed()
00016 {
00017 srand( (unsigned)time( NULL ) );
00018 }
00019
00020 double Random::nextDouble()
00021 {
00022 return rand() / double(RAND_MAX+1);
00023 }
00024
00025 int Random::nextInt( int max )
00026 {
00027 return (int)floor(max * nextDouble());
00028 }
00029
00030 double Random::nextGaussian()
00031 {
00032
00033 if (haveNextNextGaussian)
00034 {
00035 haveNextNextGaussian = false;
00036 return nextNextGaussian;
00037 }
00038 else
00039 {
00040 double v1, v2, s;
00041 do
00042 {
00043 v1 = 2 * nextDouble() - 1;
00044 v2 = 2 * nextDouble() - 1;
00045 s = v1 * v1 + v2 * v2;
00046 }
00047 while (s >= 1 || s == 0);
00048 double multiplier = sqrt(-2 * log(s)/s);
00049 nextNextGaussian = v2 * multiplier;
00050 haveNextNextGaussian = true;
00051 return v1 * multiplier;
00052 }
00053 }