Plantilla de función generate_canonical en C++

Esta plantilla en C++ se usa para convertir el valor generado por g en un valor de punto flotante en el rango [0, 1) preservando las propiedades de uniformidad de las secuencias generadas con g. Para generar suficiente entropía, generate_canonical() llamará a g() exactamente ‘k’ veces donde,

 k = max(1, \lceil \frac{b}{log_2 R} \rceil)

Sintaxis:

template ( class RealType, size_t bits, class URNG )
RealType generate_canonical (URNG& g);

Parámetros de la plantilla: esta plantilla acepta tres parámetros, como se mencionó anteriormente y se describe a continuación:

  • RealType: La función devuelve un valor de tipo coma flotante.
  • bits: Número máximo de bits en la mantisa.
  • URNG: Una clase generadora de números aleatorios uniforme.

Parámetros: La función generate_canonical() acepta un único parámetro g que se utiliza como objeto generador de números aleatorios uniformes. Se utiliza para adquirir entropía.

Valor devuelto: esta función devuelve un valor de punto flotante en el rango [0, 1).

Los siguientes programas ilustran el
programa de plantilla de C++ anterior:

// C++ program to illustrate generate_canonical()
// function.
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    // Obtain a root from the system clock:
    unsigned root = chrono::system_clock::now().time_since_epoch().count();
  
    // Random number engine class
    // that generates pseudo-random numbers
    default_random_engine generator(root);
    double can_val = generate_canonical<double, 
                              numeric_limits<double>::digits>(generator);
  
    // Print the random canonical value
    // It will display different value everytime
    cout << "Random canonical value: " << can_val;
  
    return 0;
}
Producción:

Random canonical value: 0.0281975

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

Publicación traducida automáticamente

Artículo escrito por AmanSrivastava1 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 *