Namespaces
Variants

std:: piecewise_linear_distribution

From cppreference.net
Definido en el encabezado <random>
template < class RealType = double >
class piecewise_linear_distribution ;
(desde C++11)

std::piecewise_linear_distribution produce números de punto flotante aleatorios, que se distribuyen de acuerdo con una función de densidad de probabilidad lineal dentro de cada uno de los varios subintervalos [b i , b i+1 ) . La distribución es tal que la densidad de probabilidad en cada límite de intervalo es exactamente el valor predefinido p i .

The probability density for any b i ≤x<b i+1 is p i
b i+1 -x
b i+1 -b i
+ p i+1
x-b i
b i+1 -b i
, where probability densities at interval boundaries p k are calculated as w k /S where S is the sum of all
1
2
(w k +w k+1 )(b k+1 −b k )
.

El conjunto de límites de intervalo b i y el conjunto de pesos en los límites w i son los parámetros de esta distribución.

std::piecewise_linear_distribution satisface todos los requisitos de RandomNumberDistribution .

Contenidos

Parámetros de plantilla

RealType - El tipo de resultado generado por el generador. El efecto es indefinido si este no es uno de float , double , o long double .

Tipos de miembros

Tipo de miembro Definición
result_type (C++11) RealType
param_type (C++11) el tipo del conjunto de parámetros, ver RandomNumberDistribution .

Funciones miembro

construye una nueva distribución
(función miembro pública)
(C++11)
reinicia el estado interno de la distribución
(función miembro pública)
Generación
(C++11)
genera el siguiente número aleatorio en la distribución
(función miembro pública)
Características
devuelve los parámetros de la distribución
(función miembro pública)
(C++11)
obtiene o establece el objeto de parámetros de la distribución
(función miembro pública)
(C++11)
devuelve el valor mínimo potencialmente generado
(función miembro pública)
(C++11)
devuelve el valor máximo potencialmente generado
(función miembro pública)

Funciones no miembro

(C++11) (C++11) (removed in C++20)
compara dos objetos de distribución
(función)
realiza entrada y salida de flujo en distribución de números pseudoaleatorios
(plantilla de función)

Ejemplo

#include <iomanip>
#include <iostream>
#include <map>
#include <random>
#include <string>
int main()
{
    std::random_device rd;
    std::mt19937 gen{rd()};
    // aumentar la probabilidad de 0 a 5
    // permanecer plana de 5 a 10
    // disminuir de 10 a 15 a la misma tasa
    std::vector<double> i{0, 5, 10, 15};
    std::vector<double> w{0, 1, 1, 0};
    std::piecewise_linear_distribution<> d{i.begin(), i.end(), w.begin()};
    std::map<int, int> hist;
    for (int n{}; n < 1e4; ++n)
        ++hist[d(gen)];
    for (auto [x, y] : hist)
        std::cout << std::setw(2) << std::setfill('0') << x
                  << ' ' << std::string(y / 100, '*') << '\n';
}

Salida posible:

00 *
01 ***
02 ****
03 ******
04 *********
05 *********
06 *********
07 **********
08 *********
09 **********
10 *********
11 *******
12 ****
13 ***
14 *