extreme_value_distribution — Klasa
Generuje dystrybucji extreme wartość.
template<class RealType = double> class extreme_value_distribution { public: // types typedef RealType result_type; struct param_type; // constructor and reset functions explicit extreme_value_distribution(RealType a = 0.0, RealType b = 1.0); explicit extreme_value_distribution(const param_type& parm); void reset(); // generating functions template<class URNG> result_type operator()(URNG& gen); template<class URNG> result_type operator()(URNG& gen, const param_type& parm); // property functions RealType a() const; RealType b() const; param_type param() const; void param(const param_type& parm); result_type min() const; result_type max() const; };
Parametry
- RealType
Typ wyniku zmiennoprzecinkowych, wartość domyślna to double.Dla typów możliwych, zobacz <random>.
Uwagi
Klasa szablonu opisuje dystrybucji, tworzącego wartości Całka określony przez użytkownika typu lub typu double Jeśli nie zostanie podana, rozdzielonych Extreme dystrybucji wartość.Poniższe łącza tabeli do artykułów dotyczących poszczególnych elementów.
extreme_value_distribution::a |
extreme_value_distribution::param |
|
extreme_value_distribution::operator() |
extreme_value_distribution::b |
Funkcje właściwości a() i b() zwrócić odpowiadających im wartości dla parametrów przechowywanych dystrybucji a i b.
Aby uzyskać więcej informacji na temat klasy dystrybucji i ich elementy członkowskie zobacz <random>.
Aby uzyskać szczegółowe informacje dotyczące dystrybucji extreme wartości, zobacz artykuł Wolfram MathWorld Extreme dystrybucji wartość.
Przykład
// compile with: /EHsc /W4
#include <random>
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
void test(const double a, const double b, const int s) {
// uncomment to use a non-deterministic generator
// std::random_device gen;
std::mt19937 gen(1701);
std::extreme_value_distribution<> distr(a, b);
std::cout << std::endl;
std::cout << "min() == " << distr.min() << std::endl;
std::cout << "max() == " << distr.max() << std::endl;
std::cout << "a() == " << std::fixed << std::setw(11) << std::setprecision(10) << distr.a() << std::endl;
std::cout << "b() == " << std::fixed << std::setw(11) << std::setprecision(10) << distr.b() << std::endl;
// generate the distribution as a histogram
std::map<double, int> histogram;
for (int i = 0; i < s; ++i) {
++histogram[distr(gen)];
}
// print results
std::cout << "Distribution for " << s << " samples:" << std::endl;
int counter = 0;
for (const auto& elem : histogram) {
std::cout << std::fixed << std::setw(11) << ++counter << ": "
<< std::setw(14) << std::setprecision(10) << elem.first << std::endl;
}
std::cout << std::endl;
}
int main()
{
double a_dist = 0.0;
double b_dist = 1;
int samples = 10;
std::cout << "Use CTRL-Z to bypass data entry and run using default values." << std::endl;
std::cout << "Enter a floating point value for the \'a\' distribution parameter: ";
std::cin >> a_dist;
std::cout << "Enter a floating point value for the \'b\' distribution parameter (must be greater than zero): ";
std::cin >> b_dist;
std::cout << "Enter an integer value for the sample count: ";
std::cin >> samples;
test(a_dist, b_dist, samples);
}
Dane wyjściowe
Use CTRL-Z to bypass data entry and run using default values.
Enter a floating point value for the 'a' distribution parameter: 0
Enter a floating point value for the 'b' distribution parameter (must be greater than zero): 1
Enter an integer value for the sample count: 10
min() == -1.79769e+308
max() == 1.79769e+308
a() == 0.0000000000
b() == 1.0000000000
Distribution for 10 samples:
1: -0.8813940331
2: -0.7698972281
3: 0.2951258007
4: 0.3110450734
5: 0.4210546820
6: 0.4210688771
7: 0.4598857960
8: 1.3155194200
9: 1.5379170046
10: 2.0568757061
Wymagania
Nagłówek: < losowe >
Przestrzeń nazw: std