35 #ifndef _BLAZE_UTIL_RANDOM_H_
36 #define _BLAZE_UTIL_RANDOM_H_
45 #include <boost/random/uniform_int.hpp>
46 #include <boost/random/uniform_real.hpp>
47 #include <boost/random/uniform_smallint.hpp>
63 template<
typename >
class Rand;
138 template<
typename Type >
152 template<
typename T >
friend class Rand;
190 template<
typename T >
198 inline T
generate( T min, T max )
const;
206 inline void randomize( T& value, T min, T max )
const;
221 template<
typename T >
224 boost::uniform_int<T> dist( 0, std::numeric_limits<T>::max() );
242 template<
typename T >
246 boost::uniform_smallint<T> dist( min, max );
261 template<
typename T >
282 template<
typename T >
285 value = generate( min, max );
314 inline float generate(
float min,
float max )
const;
321 inline void randomize(
float& value )
const;
322 inline void randomize(
float& value,
float min,
float max )
const;
340 boost::uniform_real<float> dist( 0.0, 1.0 );
341 return dist( Random<RNG>::rng_ );
363 boost::uniform_real<float> dist( min, max );
364 return dist( Random<RNG>::rng_ );
403 value = generate( min, max );
433 inline double generate(
double min,
double max )
const;
440 inline void randomize(
double& value )
const;
441 inline void randomize(
double& value,
double min,
double max )
const;
459 boost::uniform_real<double> dist( 0.0, 1.0 );
460 return dist( Random<RNG>::rng_ );
482 boost::uniform_real<double> dist( min, max );
483 return dist( Random<RNG>::rng_ );
522 value = generate( min, max );
545 class Rand<long double>
551 inline long double generate()
const;
552 inline long double generate(
long double min,
long double max )
const;
559 inline void randomize(
long double& value )
const;
560 inline void randomize(
long double& value,
long double min,
long double max )
const;
578 boost::uniform_real<long double> dist( 0.0, 1.0 );
579 return dist( Random<RNG>::rng_ );
601 boost::uniform_real<long double> dist( min, max );
602 return dist( Random<RNG>::rng_ );
641 value = generate( min, max );
662 template<
typename T >
663 class Rand< complex<T> >
669 inline const complex<T>
generate()
const;
670 inline const complex<T>
generate(
const T& min,
const T& max )
const;
671 inline const complex<T>
generate(
const T& realmin,
const T& realmax,
672 const T& imagmin,
const T& imagmax )
const;
679 inline void randomize( complex<T>& value )
const;
680 inline void randomize( complex<T>& value,
const T& min,
const T& max )
const;
681 inline void randomize( complex<T>& value,
const T& realmin,
const T& realmax,
682 const T& imagmin,
const T& imagmax )
const;
699 template<
typename T >
700 inline const complex<T> Rand< complex<T> >::generate()
const
703 return complex<T>( tmp.generate(), tmp.generate() );
723 template<
typename T >
724 inline const complex<T> Rand< complex<T> >::generate(
const T& min,
const T& max )
const
727 return complex<T>( tmp.generate( min, max ), tmp.generate( min, max ) );
750 template<
typename T >
751 inline const complex<T> Rand< complex<T> >::generate(
const T& realmin,
const T& realmax,
752 const T& imagmin,
const T& imagmax )
const
755 return complex<T>( tmp.generate( realmin, realmax ), tmp.generate( imagmin, imagmax ) );
771 template<
typename T >
772 inline void Rand< complex<T> >
::randomize( complex<T>& value )
const
795 template<
typename T >
796 inline void Rand< complex<T> >
::randomize( complex<T>& value,
const T& min,
const T& max )
const
798 value = generate( min, max );
823 template<
typename T >
824 inline void Rand< complex<T> >
::randomize( complex<T>& value,
const T& realmin,
const T& realmax,
825 const T& imagmin,
const T& imagmax )
const
827 value = generate( realmin, realmax, imagmin, imagmax );
844 template<
typename T >
847 template<
typename T,
typename A1 >
848 inline T
rand(
const A1& a1 );
850 template<
typename T,
typename A1,
typename A2 >
851 inline T
rand(
const A1& a1,
const A2& a2 );
853 template<
typename T,
typename A1,
typename A2,
typename A3 >
854 inline T
rand(
const A1& a1,
const A2& a2,
const A3& a3 );
856 template<
typename T,
typename A1,
typename A2,
typename A3,
typename A4 >
857 inline T
rand(
const A1& a1,
const A2& a2,
const A3& a3,
const A4& a4 );
859 template<
typename T,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5 >
860 inline T
rand(
const A1& a1,
const A2& a2,
const A3& a3,
const A4& a4,
const A5& a5 );
862 template<
typename T >
865 template<
typename T,
typename A1 >
866 inline void randomize( T& value,
const A1& a1 );
868 template<
typename T,
typename A1,
typename A2 >
869 inline void randomize( T& value,
const A1& a1,
const A2& a2 );
871 template<
typename T,
typename A1,
typename A2,
typename A3 >
872 inline void randomize( T& value,
const A1& a1,
const A2& a2,
const A3& a3 );
874 template<
typename T,
typename A1,
typename A2,
typename A3,
typename A4 >
875 inline void randomize( T& value,
const A1& a1,
const A2& a2,
const A3& a3,
const A4& a4 );
877 template<
typename T,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5 >
878 inline void randomize( T& value,
const A1& a1,
const A2& a2,
const A3& a3,
const A4& a4,
const A5& a5 );
881 inline void setSeed( uint32_t seed );
900 template<
typename T >
904 return tmp.generate();
923 return tmp.generate( a1 );
941 inline T
rand(
const A1& a1,
const A2& a2 )
944 return tmp.generate( a1, a2 );
965 inline T
rand(
const A1& a1,
const A2& a2,
const A3& a3 )
968 return tmp.generate( a1, a2, a3 );
991 inline T
rand(
const A1& a1,
const A2& a2,
const A3& a3,
const A4& a4 )
994 return tmp.generate( a1, a2, a3, a4 );
1013 template<
typename T
1019 inline T
rand(
const A1& a1,
const A2& a2,
const A3& a3,
const A4& a4,
const A5& a5 )
1022 return tmp.generate( a1, a2, a3, a4, a5 );
1042 template<
typename T >
1046 tmp.randomize( value );
1061 template<
typename T
1066 tmp.randomize( value, a1 );
1083 template<
typename T
1086 inline void randomize( T& value,
const A1& a1,
const A2& a2 )
1089 tmp.randomize( value, a1, a2 );
1107 template<
typename T
1111 inline void randomize( T& value,
const A1& a1,
const A2& a2,
const A3& a3 )
1114 tmp.randomize( value, a1, a2, a3 );
1133 template<
typename T
1138 inline void randomize( T& value,
const A1& a1,
const A2& a2,
const A3& a3,
const A4& a4 )
1141 tmp.randomize( value, a1, a2, a3, a4 );
1161 template<
typename T
1167 inline void randomize( T& value,
const A1& a1,
const A2& a2,
const A3& a3,
const A4& a4,
const A5& a5 )
1170 tmp.randomize( value, a1, a2, a3, a4, a5 );
uint32_t getSeed()
Returns the current seed of the random number generator.
Definition: Random.h:1181
void randomize(T &value)
Randomization of a given variable.
Definition: Random.h:1043
32-bit unsigned integer type of the Blaze library.
Header file for the random number generator used in the Blaze library.
void randomize(T &value) const
Randomization of the given variable with a new value in the range .
Definition: Random.h:262
void setSeed(uint32_t seed)
Setting the seed of the random number generator.
Definition: Random.h:1198
T rand()
Random number function.
Definition: Random.h:901
Header file for run time assertion macros.
Default implementation of the Rand class for integral data types.This default implementation of the R...
Definition: Random.h:63
Random number generator.The Random class encapsulates the initialization of the given random number g...
Definition: Random.h:139
static uint32_t seed_
The current seed for the variate generator.
Definition: Random.h:145
static Type rng_
The mersenne twister variate generator.
Definition: Random.h:146
T generate() const
Generation of a random value in the range .
Definition: Random.h:222
Header file for basic type definitions.
Header file for the complex data type.
Base class for non-creatable (static) classes.The NonCreatable class is intended to work as a base cl...
Definition: NonCreatable.h:65
Base class for non-creatable (static) classes.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_INTERNAL_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERTION flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:101