std::uniform_real_ clase de distribución en C++ con ejemplos

En probabilidad, la función de distribución uniforme se refiere a la distribución en la que las probabilidades se definen en una variable aleatoria continua, que puede tomar cualquier valor entre dos números, luego se dice que la distribución es una distribución de probabilidad continua. Por ejemplo, la temperatura a lo largo de un día determinado se puede representar mediante una variable aleatoria continua y se dice que la distribución de probabilidad correspondiente es continua.

\[ f(x) = \frac{1}{b-a}, & a\leq x < b\\ \]

C++ ha introducido la clase uniform_real_distribution en la biblioteca aleatoria cuya función miembro proporciona números reales aleatorios o valores continuos de un rango de entrada dado con probabilidad uniforme.
Funciones miembro públicas en la clase uniform_real_distribution: 
 

  1. operator(): esta función devuelve un valor aleatorio del rango dado. El tipo de datos del valor devuelto se especifica durante la inicialización de la clase de plantilla. La probabilidad para cualquier valor es la misma. La complejidad temporal de esta operación es O(1).
    Ejemplo: 

    CPP

    // C++ code to demonstrate the working of
    // operator() function
      
    #include <iostream>
      
    // for uniform_real_distribution function
    #include <random>
      
    using namespace std;
      
    int main()
    {
        // Here default_random_engine object
        // is used as source of randomness
        // We can give seed also to default_random_engine
        // if psuedorandom numbers are required
        default_random_engine generator;
      
        double a = 0.0, b = 1.0;
      
        // Initializing of uniform_real_distribution class
        uniform_real_distribution<double> distribution(a, b);
      
        // number of experiments
        const int num_of_exp = 10000000;
        // number of ranges
        int n = 100;
        int p[n] = {};
        for (int i = 0; i < num_of_exp; ++i) {
      
            // using operator() function
            // to give random values
            double number = distribution(generator);
            ++p[int(number * n)];
        }
      
        cout << "Probability of some ranges" << endl;
        // Displaying the probability of some ranges
        // after generating values 10000 times.
        cout << "0.50-0.51"
             << " " << (float)p[50] / (float)num_of_exp << endl;
        cout << "0.60-0.61"
             << " " << (float)p[60] / (float)num_of_exp << endl;
        cout << "0.45-0.46"
             << " " << (float)p[45] / (float)num_of_exp << endl;
        return 0;
    }
    Producción:

    Probability of some ranges
    0.50-0.51 0.0099808
    0.60-0.61 0.0099719
    0.45-0.46 0.009999

La probabilidad de todos los rangos es casi igual.

  • a(): Devuelve el límite inferior del rango. 
     
  • b(): Devuelve el límite superior del rango. 
     
  • min(): Devuelve el valor mínimo que puede devolver la función. Para una distribución uniforme, min() y a() devuelven el mismo valor. 
     
  • max(): Devuelve el valor mínimo que la función puede devolver. Para una distribución uniforme, min() y a() devuelven el mismo valor. 
     
  • reset(): esta función restablece la distribución de modo que los siguientes valores aleatorios generados no se basen en los valores anteriores. 
     

Ejemplo: 
 

CPP

// C++ code to demonstrate the working of
// a(), b(), min(), max(), reset() function
  
#include <iostream>
  
// for uniform_real_distribution function
#include <random>
  
using namespace std;
  
int main()
{
    double a = 0, b = 1.5;
  
    // Initializing of uniform_real_distribution class
    uniform_real_distribution<double> distribution(a, b);
  
    // Using a() and b()
    cout << "Lower Bound"
         << " " << distribution.a() << endl;
    cout << "Upper Bound"
         << " " << distribution.b() << endl;
  
    // Using min() and max()
    cout << "Minimum possible output"
         << " " << distribution.min() << endl;
    cout << "Maximum possible output"
         << " " << distribution.max() << endl;
  
    // Using reset function
    distribution.reset();
  
    return 0;
}
Producción: 

Lower Bound 0
Upper Bound 1.5
Minimum possible output 0
Maximum possible output 1.5

 

Referencia: 
http://www.cplusplus.com/reference/random/uniform_real_distribution/
 

Publicación traducida automáticamente

Artículo escrito por AyushShukla8 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *