Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #pragma once
00025 #ifndef __D_RANDOM__
00026 #define __D_RANDOM__
00027
00028 #include <cstdlib>
00029
00030 namespace DUtils {
00031
00032 class Random
00033 {
00034 public:
00038 static void SeedRand();
00039
00044 static void SeedRandOnce();
00045
00050 static void SeedRand(int seed);
00051
00057 static void SeedRandOnce(int seed);
00058
00063 template <class T>
00064 static T RandomValue(){
00065 return (T)rand()/(T)RAND_MAX;
00066 }
00067
00074 template <class T>
00075 static T RandomValue(T min, T max){
00076 return Random::RandomValue<T>() * (max - min) + min;
00077 }
00078
00085 static int RandomInt(int min, int max);
00086
00092 template <class T>
00093 static T RandomGaussianValue(T mean, T sigma)
00094 {
00095
00096 T x1, x2, w, y1;
00097
00098 do {
00099 x1 = (T)2. * RandomValue<T>() - (T)1.;
00100 x2 = (T)2. * RandomValue<T>() - (T)1.;
00101 w = x1 * x1 + x2 * x2;
00102 } while ( w >= (T)1. || w == (T)0. );
00103
00104 w = sqrt( ((T)-2.0 * log( w ) ) / w );
00105 y1 = x1 * w;
00106
00107 return( mean + y1 * sigma );
00108 }
00109
00110 private:
00111
00113 static bool m_seeded_current_time;
00114
00116 static bool m_seeded_int;
00117
00118 };
00119
00120 }
00121
00122 #endif
00123