Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::studen...distribution(3) C++ Standard Libarystd::studen...distribution(3)

NAME
       std::student_t_distribution - std::student_t_distribution

Synopsis
	  Defined in header <random>
	  template< class RealType = double >  (since C++11)
	  class	student_t_distribution;

	  Produces  random  floating-point  values x, distributed according to
       probability
	  density function:

	  \(p(x|n) = \frac{1}{\sqrt{n\pi} } \cdot
	  \frac{\Gamma(\frac{n+1}{2})}{\Gamma(\frac{n}{2})} \cdot
	  (1+\frac{x^2}{n})^{-\frac{n+1}{2} } \)p(x|n) =

	  1

	  n

	  (

	  n+1
	  2

	  )
	  (

	  n
	  2

	  )

	  1+

	  x2
	  n

	    -

	  n+1
	  2

	  where	n is known as the number of degrees of freedom.	This distribu-
       tion is used when
	  estimating the mean of an unknown normally distributed value given n
       + 1 independent
	  measurements,	each with additive errors of unknown  standard	devia-
       tion, as	in
	  physical  measurements.  Or,	alternatively, when estimating the un-
       known mean of a
	  normal distribution with unknown standard deviation,	given  n  +  1
       samples.

	  std::student_t_distribution satisfies	all requirements of RandomNum-
       berDistribution.

Template parameters
	  RealType - The result	type generated by the generator. The effect is
       undefined if
		     this is not one of	float, double, or long double.

Member types
	  Member type	      Definition
	  result_type (C++11) RealType
	  param_type  (C++11)	the  type of the parameter set,	see RandomNum-
       berDistribution.

Member functions
	  constructor	constructs new distribution
	  (C++11)	(public	member function)
	  reset		resets the internal state of the distribution
	  (C++11)	(public	member function)

Generation
	  operator()	generates the next random number in the	distribution
	  (C++11)	(public	member function)

Characteristics
	  n		returns	the n distribution parameter (degrees of free-
       dom)
			(public	member function)
	  param		gets or	sets the distribution parameter	object
	  (C++11)	(public	member function)
	  min		returns	the minimum potentially	generated value
	  (C++11)	(public	member function)
	  max		returns	the maximum potentially	generated value
	  (C++11)	(public	member function)

Non-member functions
	  operator==
	  operator!=		    compares two distribution objects
	  (C++11)		    (function)
	  (C++11)(removed in C++20)
	  operator<<		     performs  stream  input  and  output   on
       pseudo-random number
	  operator>>		    distribution
	  (C++11)		    (function template)

Example
       // Run this code

	#include <algorithm>
	#include <cmath>
	#include <iomanip>
	#include <iostream>
	#include <map>
	#include <random>
	#include <vector>

	template<int Height = 5, int BarWidth =	1, int Padding = 1, int	Offset
       = 0, class Seq>
	void draw_vbars(Seq&& s, const bool DrawMinMax = true)
	{
	    static_assert(0  <	Height and 0 < BarWidth	and 0 <= Padding and 0
       <= Offset);

	    auto cout_n	= [](auto&& v, int n = 1)
	    {
		while (n-- > 0)
		    std::cout << v;
	    };

	    const  auto	 [min,	max]   =   std::minmax_element(std::cbegin(s),
       std::cend(s));

	    std::vector<std::div_t> qr;
	    for	(typedef decltype(*std::cbegin(s)) V; V	e : s)
		qr.push_back(std::div(std::lerp(V(0), 8	* Height,
						(e  -  *min) / (*max - *min)),
       8));

	    for	(auto h{Height}; h-- > 0; cout_n('\n'))
	    {
		cout_n(' ', Offset);

		for (auto dv : qr)
		{
		    const auto q{dv.quot}, r{dv.rem};
		    unsigned char d[]{0xe2, 0x96, 0x88,	0}; // Full Block: ''
		    q <	h ? d[0] = ' ',	d[1] = 0 : q ==	h ? d[2] -= (7 - r)  :
       0;
		    cout_n(d, BarWidth), cout_n(' ', Padding);
		}

		if (DrawMinMax && Height > 1)
		    Height - 1 == h ? std::cout	<< " " << *max:
				  h ? std::cout	<< " "
				    : std::cout	<< " " << *min;
	    }
	}

	int main()
	{
	    std::random_device rd{};
	    std::mt19937 gen{rd()};

	    std::student_t_distribution<> d{10.0f};

	    const int norm = 10'000;
	    const float	cutoff = 0.000'3f;

	    std::map<int, int> hist{};
	    for	(int n = 0; n != norm; ++n)
		++hist[std::round(d(gen))];

	    std::vector<float> bars;
	    std::vector<int> indices;
	    for	(const auto& [n, p] : hist)
		if (float x = p	* (1.0f	/ norm); cutoff	< x)
		{
		    bars.push_back(x);
		    indices.push_back(n);
		}

	    for	(draw_vbars<8, 5>(bars); const int n : indices)
		std::cout << " " << std::setw(2) << n << "   ";
	    std::cout << '\n';
	}

Possible output:
								0.3753

		   0.0049
	 -4    -3    -2	   -1	  0	1     2	    3	  4	5

External links
	  Weisstein,  Eric  W.	"Student's  t-Distribution." From MathWorld  A
       Wolfram Web
	  Resource.

http://cppreference.com		  2024.06.10	 std::studen...distribution(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::student_t_distribution&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help