uniform_real_distribution (Clase)

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Genera una distribución de punto flotante uniforme (todos los valores son probables en la misma medida) dentro de un rango de salida inclusivo-exclusivo.

class uniform_real_distribution {
public:
    // types 
    typedef RealType result_type;
    struct param_type;
    // constructors and reset functions 
    explicit uniform_real_distribution(RealType a = 0.0, RealType b = 1.0);
    explicit uniform_real_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 result_type a() const;
    result_type b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
};

Parámetros

RealType
Un tipo de resultado de punto flotante, el valor predeterminado es double. Para los tipos posibles, consulte <> </> > .

La clase de plantilla describe una distribución inclusiva-exclusiva que genera valores de un tipo de punto flotante integral especificado por el usuario con una distribución, de modo que cada valor es probable en igual medida. La tabla siguiente incluye vínculos a artículos sobre miembros individuales.

uniform_real_distribution::uniform_real_distributionuniform_real_distribution::auniform_real_distribution::param
uniform_real_distribution::operator()uniform_real_distribution::buniform_real_distribution::param_type

El miembro de propiedad a() devuelve el límite mínimo de la distribución almacenado actualmente, mientras que b() devuelve el límite máximo almacenado actualmente. Para esta clase de distribución, estos valores mínimos y máximo son los mismos que los devueltos por las funciones de propiedad común min() y max() se describe en el <> > tema.

Para obtener más información acerca de las clases de distribución y sus miembros, vea <> </> > .

// 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 seed  
    //    std::random_device rd;  
    //    std::mt19937 gen(rd());  
    std::mt19937 gen(1729);  
  
    std::uniform_real_distribution<> distr(a,b);  
  
    std::cout << "lower bound == " << distr.a() << std::endl;  
    std::cout << "upper bound == " << 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::setprecision(10) << elem.first << std::endl;  
    }  
    std::cout << std::endl;  
}  
  
int main()  
{  
    double a_dist = 1.0;  
    double b_dist = 1.5;  
  
    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 lower bound of the distribution: ";  
    std::cin >> a_dist;  
    std::cout << "Enter a floating point value for the upper bound of the distribution: ";  
    std::cin >> b_dist;  
    std::cout << "Enter an integer value for the sample count: ";  
    std::cin >> samples;  
  
    test(a_dist, b_dist, samples);  
}  
  

Use CTRL-Z to bypass data entry and run using default values.Enter a floating point value for the lower bound of the distribution: .5Enter a floating point value for the upper bound of the distribution: 1Enter an integer value for the sample count: 20lower bound == 0.5upper bound == 1Distribution for 20 samples:          1: 0.5144304741          2: 0.6003997192          3: 0.6060792968          4: 0.6270416650          5: 0.6295091197          6: 0.6437749373          7: 0.6513740058          8: 0.7062379346          9: 0.7117609406         10: 0.7206888566         11: 0.7423223702         12: 0.7826033033         13: 0.8112872958         14: 0.8440467608         15: 0.8461254641         16: 0.8598305065         17: 0.8640874069         18: 0.8770968361         19: 0.9397858282         20: 0.9804645012  

Encabezado:<>>

Espacio de nombres: std

Construye la distribución.

explicit uniform_real_distribution(RealType a = 0.0, RealType b = 1.0);

 
explicit uniform_real_distribution(const param_type& parm);

Parámetros

a
Límite inferior para los valores aleatorios (incluido).

b
Límite superior para los valores aleatorios (excluido).

parm
La estructura de parámetros utilizada para construir la distribución.

Comentarios

Condición previa:a < b

El primer constructor crea un objeto cuyo valor a almacenado contiene el valor a y cuyo valor b almacenado contiene el valor b.

El segundo constructor crea un objeto cuyos parámetros almacenados se inicializan desde parm. Los parámetros actuales de una distribución existente se pueden obtener y definir llamando a la función miembro param().

Almacena todos los parámetros de la distribución.

struct param_type {  
   typedef uniform_real_distribution<RealType> distribution_type;  
   param_type(RealType a = 0.0, RealType b = 1.0);
   RealType a() const;
   RealType b() const;
   .....  
   bool operator==(const param_type& right) const;
   bool operator!=(const param_type& right) const;
   };  

Parámetros

Consulte el tema primario uniform_real_distribution (clase).

Comentarios

Condición previa:a < b

Esta estructura se puede pasar al constructor de clases de la distribución en el momento de creación de instancias, a la función miembro param() para definir los parámetros almacenados de una distribución existente y a operator() para usarse en lugar de los parámetros almacenados.

<>>

Mostrar: