std::extreme_value_distribution - cppreference.com

template<classRealType=double>classextreme_value_distribution;(since C++11)Produces random numbers according to the

Generalized extreme value distribution

(it is also known as Gumbel Type I, log-Weibull, Fisher-Tippett Type I):

p(x;a,b) = 1b exp⎛

⎝a-xb - exp⎛

⎝a-xb⎞

⎠⎞

⎠std::extreme_value_distribution satisfies all requirements of

RandomNumberDistribution

.

Template parameters

RealType - The result type generated by the generator. The effect is undefined if this is not one of float, double, or longdouble. Member types

Member type Definition result_type(C++11)RealTypeparam_typethe type of the parameter set, see

RandomNumberDistribution

. Member functions

(constructor)

constructs new distribution
(public member function)

[edit]

reset

resets the internal state of the distribution
(public member function)

[edit]

Generation

operator()

generates the next random number in the distribution
(public member function)

[edit]

Characteristics

ab

returns the distribution parameters
(public member function)

[edit]

param

gets or sets the distribution parameter object
(public member function)

[edit]

min

returns the minimum potentially generated value
(public member function)

[edit]

max

returns the maximum potentially generated value
(public member function)

[edit]

Non-member functions

Example

Run this code

#include<algorithm>#include<cmath>#include<iomanip>#include<iostream>#include<map>#include<random>#include<vector>template<intHeight=5,intBarWidth=1,intPadding=1,intOffset=0,classSeq>voiddraw_vbars(Seq&&s,constboolDrawMinMax=true){static_assert(0<Heightand0<BarWidthand0<=Paddingand0<=Offset);autocout_n=[](auto&&v,intn=1){while(n-->0)std::cout<<v;};constauto[min,max]=std::minmax_element(std::cbegin(s),std::cend(s));std::vector<std::div_t>qr;for(typedefdecltype(*std::cbegin(s))V;Ve:s)qr.push_back(std::div(std::lerp(V(0),8*Height,(e-*min)/(*max-*min)),8));for(autoh{Height};h-->0;cout_n('\n')){cout_n(' ',Offset);for(autodv:qr){constautoq{dv.quot},r{dv.rem};unsignedchard[]{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;}}intmain(){std::random_devicerd{};std::mt19937gen{rd()};std::extreme_value_distribution<>d{-1.618f,1.618f};constintnorm=10'000;constfloatcutoff=0.000'3f;std::map<int,int>hist{};for(intn=0;n!=norm;++n)++hist[std::round(d(gen))];std::vector<float>bars;std::vector<int>indices;for(constauto&[n,p]:hist)if(constfloatx=p*(1.0f/norm);x>cutoff){bars.push_back(x);indices.push_back(n);}draw_vbars<8,4>(bars);for(intn:indices)std::cout<<' '<<std::setw(2)<<n<<" ";std::cout<<'\n';}Possible output:

████ ▅▅▅▅ ┬ 0.2186 ████ ████ │ ▁▁▁▁ ████ ████ ▇▇▇▇ │ ████ ████ ████ ████ │ ████ ████ ████ ████ ▆▆▆▆ │ ████ ████ ████ ████ ████ ▁▁▁▁ │ ▄▄▄▄ ████ ████ ████ ████ ████ ████ ▃▃▃▃ │ ▁▁▁▁ ████ ████ ████ ████ ████ ████ ████ ████ ▆▆▆▆ ▃▃▃▃ ▂▂▂▂ ▁▁▁▁ ▁▁▁▁ ▁▁▁▁ ▁▁▁▁ ┴ 0.0005 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 External links