C++11 chi squared distribution random number generator
The C++11 random chi_squared_distribution produces random numbers x>0 using the respective discrete probability function of the distribution-the function is shown at the end of the post.
Link :C++11 random number generator
The distribution class declaration is shown below.
template<class RealType = double> class chi_squared_distribution;
The class default type is double type and note this distribution can generate only floating point type values or real numbers.
The distribution is based on the the chi_squared_distribution of the probability distribution.
The types and member functions of the class is shown below.
Types
typedef RealType result_type; typedef unspecified param_type;
The RealType is a type definition of the template type and the param_type is a structure but note the definition of the param_type will alter from compiler to compiler.
Constructors and reset function
explicit chi_squared_distribution(RealType n = 1); explicit chi_squared_distribution(const param_type& parm); void reset( );
The first constructor accepts a parameter name ‘n’ whose default value is 1.The default value will be same in all the compiler.And the use of this parameter is to evaluate the probability of the random values in the distribution.The relation 0 < n on ‘n’ should hold.
The second constructor accept param_type object and in this case the value ‘n’ is initialized from the ‘n’ value of the param_type object-the param_type also accept a parameter name ‘n’.
chi_squared_distribution< >csd ; chi_squared_distribution<float > csd1; chi_squared_distribution< float >::param_type pt( 560 ) ; chi_squared_distribution< long double > csd2(pt) ; //error! , type of pt is float but type of csd2 is double type
reset( )
The reset( ) function reset the distribution state.
Generating functions
template<class URNG> result_type operator( )(URNG& g); template<class URNG> result_type operator( )(URNG& g, const param_type& parm);
the first operator() function
The generated random sequence is obtained using the operator() function.The first overloaded operator() accept URNG(Uniform Random Number Generator) or engine.
chi_squared_distribution< >csd ; default_random_engine dre ; cout<< csd(dre) << ” ” << csd(dre) << endl ;
Output in Code::Blocks,
the second operator( ) function
The second overloaded operator( ) function accept URNG and param_type object.
chi_squared_distribution< float >csd ; chi_squared_distribution< float >::param_type pt( 560 ) ; knuth_b kb ; //an engine cout<< csd(kb , pt) << ” ” << csd(kb , pt) << endl ;
Output in Code::blocks,
Property functions
RealType n() const; param_type param() const; void param(const param_type& parm); result_type min() const; result_type max() const;
n() function
This function returns the ‘n’ value of the distribution.
chi_squared_distribution< >csd , csd1( 900 ); cout<< csd.n() << endl << csd1.n() ;
Output,
900
param()
This function returns the param_type object.
chi_squared_distribution< >csd( 123 ); cout<< csd.param().n() << endl ;
Output,
param(param_type)
Using this function we can change the ‘n’ value of the distribution to the ‘n’ value of the param_type object by passing the param_type object.
chi_squared_distribution<float > csd(5000 ); cout<< csd.n() << endl ; chi_squared_distribution< float >::param_type pt( 56.01 ) ; csd.param( pt ); cout<< csd.n() ;
Output,
56.01
min() function
The min() returns the smallest value the distribution can generate,which is the value 0.
chi_squared_distribution<float > csd(5000 ); cout<< csd.min( );
Output,
max() function
The max() returns the largest value the distribution can generate.It returns the value of numeric_limits<result_type>::max().
chi_squared_distribution<float > csd( 5000 ); cout<< csd.max( );
Output,
Side note
chi_squared_distribution produces random numbers x distributed according to the probability density function,