22 #ifndef _BLAZE_UTIL_RANDOM_H_
23 #define _BLAZE_UTIL_RANDOM_H_
32 #include <boost/random/uniform_int.hpp>
33 #include <boost/random/uniform_real.hpp>
34 #include <boost/random/uniform_smallint.hpp>
50 template<
typename >
class Rand;
125 template<
typename Type >
139 template<
typename T >
friend class Rand;
177 template<
typename T >
184 explicit inline Rand();
192 inline operator T()
const;
214 template<
typename T >
235 template<
typename T >
240 boost::uniform_smallint<T> dist( min, max );
251 template<
typename T >
282 explicit inline Rand();
290 inline operator float()
const;
316 boost::uniform_real<float> dist( 0.0, 1.0 );
317 value_ = dist( Random<RNG>::rng_ );
339 boost::uniform_real<float> dist( min, max );
340 value_ = dist( Random<RNG>::rng_ );
352 inline Rand<float>::operator float()
const
383 explicit inline Rand();
384 explicit inline Rand(
double min,
double max );
391 inline operator double()
const;
417 boost::uniform_real<double> dist( 0.0, 1.0 );
418 value_ = dist( Random<RNG>::rng_ );
440 boost::uniform_real<double> dist( min, max );
441 value_ = dist( Random<RNG>::rng_ );
453 inline Rand<double>::operator double()
const
478 class Rand<long double>
484 explicit inline Rand();
485 explicit inline Rand(
long double min,
long double max );
492 inline operator long double()
const;
518 boost::uniform_real<long double> dist( 0.0, 1.0 );
519 value_ = dist( Random<RNG>::rng_ );
541 boost::uniform_real<long double> dist( min, max );
542 value_ = dist( Random<RNG>::rng_ );
554 inline Rand<long double>::operator
long double()
const
577 template<
typename T >
578 class Rand< complex<T> >
584 explicit inline Rand();
585 explicit inline Rand(
const T&
min,
const T&
max );
586 explicit inline Rand(
const T& realmin,
const T& realmax,
const T& imagmin,
const T& imagmax );
593 inline operator complex<T>()
const;
616 template<
typename T >
617 inline Rand< complex<T> >::Rand()
618 : value_( Rand<T>(), Rand<T>() )
637 template<
typename T >
638 inline Rand< complex<T> >::Rand(
const T&
min,
const T&
max )
639 : value_( Rand<T>( min, max), Rand<T>( min, max ) )
661 template<
typename T >
662 inline Rand< complex<T> >::Rand(
const T& realmin,
const T& realmax,
const T& imagmin,
const T& imagmax )
663 : value_( Rand<T>( realmin, realmax ), Rand<T>( imagmin, imagmax ) )
675 template<
typename T >
676 inline Rand< complex<T> >::operator complex<T>()
const
695 template<
typename T >
698 template<
typename T,
typename A1 >
699 inline T
rand(
const A1& a1 );
701 template<
typename T,
typename A1,
typename A2 >
702 inline T
rand(
const A1& a1,
const A2& a2 );
704 template<
typename T,
typename A1,
typename A2,
typename A3 >
705 inline T
rand(
const A1& a1,
const A2& a2,
const A3& a3 );
707 template<
typename T,
typename A1,
typename A2,
typename A3,
typename A4 >
708 inline T
rand(
const A1& a1,
const A2& a2,
const A3& a3,
const A4& a4 );
710 template<
typename T,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5 >
711 inline T
rand(
const A1& a1,
const A2& a2,
const A3& a3,
const A4& a4,
const A5& a5 );
714 inline void setSeed( uint32_t seed );
733 template<
typename T >
774 inline T
rand(
const A1& a1,
const A2& a2 )
798 inline T
rand(
const A1& a1,
const A2& a2,
const A3& a3 )
824 inline T
rand(
const A1& a1,
const A2& a2,
const A3& a3,
const A4& a4 )
852 inline T
rand(
const A1& a1,
const A2& a2,
const A3& a3,
const A4& a4,
const A5& a5 )
854 Rand<T> tmp( a1, a2, a3, a4, a5 );