Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

<random>

Define muchos generadores de números aleatorios, incluidos los verdaderos generadores distribuidos uniformemente.

#include <random>

Un generador de números aleatorios es un objeto que genera una secuencia de valores pseudoaleatorios. Un generador que genera valores distribuidos uniformemente en un intervalo especificado es un motor. Un motor se puede combinar con una distribución, pasando el motor como argumento al operator() de la distribución o mediante un variate_generator (Clase), para generar valores que se distribuyen de manera definida por la implementación.

La mayoría de los generadores de números aleatorios son plantillas cuyos parámetros personalizan el generador. Las descripciones de los generadores que toman un tipo como argumento usan nombres de parámetro de plantilla comunes para describir las propiedades del tipo permitidas como tipo de argumento real, de la siguiente forma:

  • IntType indica un tipo entero con signo o sin signo.

  • UIntType indica un tipo entero sin signo.

  • RealType indica un tipo de punto flotante.

Un motor es una clase TR1 o una clase de plantilla cuyas instancias actúan como origen de números aleatorios enrutados uniformemente entre un mínimo y un máximo. Un motor puede ser un motor simple o un motor compuesto. Cada motor tiene los miembros siguientes:

  • typedef numeric-type result_type es el tipo devuelto por el operator()del generador.

  • result_type min() devuelve el valor mínimo devuelto por operator() del generador.

  • result_type max() devuelve el valor máximo devuelto por operator() del generador. Cuando result_type es un tipo entero, este es el valor máximo que puede devolverse realmente; cuando result_type es un tipo de punto flotante, este es el valor más pequeño mayor que todos los valores que pueden devolverse.

  • void seed() La función de inicialización inicializa el motor con los valores de inicialización predeterminados.

  • template <class InIt> void seed(InIt& first, InIt last) La función de inicialización inicializa el motor con valores de tipo unsigned long a partir de la secuencia medio abierta señalada por [first, last). Si la secuencia no es lo suficiente larga para inicializar totalmente el motor, la función almacena el valor last en first y produce un objeto de tipo std::invalid_argument.

    Nota Nota

    Solo los motores conservados para compatibilidad TR1 incluyen este miembro.

  • result_type operator()() devuelve valores distribuidos uniformemente entre min() y max().

min, max y result_type no se describen detalladamente para los motores siguientes.

A partir de Visual Studio 2010, todos los motores salvo los que se conservan para compatibilidad con TR1 incluyen también los miembros siguientes:

  • Un constructor explícito con el argumento result_type x0 que crea un motor propagado como si se llamara a seed(x0).

  • Un constructor explícito con el argumento seed_seq& seq que crea un motor propagado como si se llamara a seed(seq).

  • void seed(result_type x0) La función de inicialización inicializa el motor con el valor de inicialización x0.

  • void seed(seed_seq& seq) La función de inicialización inicializa el motor con los valores de inicialización de seq.

  • void discard(unsigned long long count) llama eficazmente las veces del recuento de operator() y descarta cada valor.

Cada motor tiene un estado que determina la secuencia de valores que se generarán mediante llamadas subsiguientes a operator(). Los estados de dos objetos del mismo tipo se pueden comparar mediante operator== y operator!=. Si los dos estados se consideran iguales, los objetos generará la misma secuencia de valores. El estado de un objeto se puede guardar en una secuencia como una secuencia de valores sin signo de 32 bits utilizando el objeto operator<<. El estado no se cambia al guardarlo. Una estado guardado se puede leer en un objeto del mismo tipo utilizando operator>>.

Un motor simple es un motor que genera números aleatorios directamente. Esta biblioteca brinda una clase cuyos objetos son motores simples. También proporciona cuatro plantillas de clase de las que se pueden crear instancias utilizando valores que proporcionan parámetros del algoritmo que implementan, y nueve instancias predefinidas de esas plantillas de clase. Los objetos de estos tipos también son motores simples.

Un motor compuesto es un motor que obtiene números aleatorios de uno o varios motores simples y genera una secuencia de números aleatorios uniformemente distribuidos con esos valores. Esta biblioteca brinda las plantillas de clase para dos motores compuestos.

Una distribución es una clase TR1 o una clase de plantilla cuyas instancias transforman una secuencia de números aleatorios uniformemente distribuidos obtenidos procedentes de un motor en una secuencia de números aleatorios con una distribución determinada. Cada distribución tiene los miembros siguientes:

  • typedef numeric-type input_type es el tipo que debe ser devuelto por el motor pasado a operator().

  • typedef numeric-type result_type es el tipo devuelto por el operator()de la distribución.

  • void reset() descarta cualquier valor almacenado en caché, de forma que el resultado de la siguiente llamada a operator() no dependa de los valores obtenidos del motor antes de la llamada.

  • template <class Engine> result_type operator()(Engine& eng) devuelve valores que se distribuyen según la definición de la distribución, utilizando eng como origen de valores aleatorios distribuidos uniformemente y el paquete de parámetros almacenado.

input_type, result_type y reset no se describen detalladamente para las distribuciones siguientes.

A partir de Visual Studio 2010, cada distribución tiene también:

  • typedef unspecified-type param_type es el paquete de parámetros pasados a operator() para generar su valor devuelto.

  • Un constructor const param& inicializa el paquete almacenado de parámetros de argumento.

  • param_type param() const obtiene el paquete de parámetros almacenado.

  • void param(const param_type&) establece el paquete de parámetros almacenado desde su argumento.

  • template <class Engine> result_type operator()(Engine& eng, param_type par0) devuelve valores distribuidos según la definición de la distribución, utilizando eng como origen de valores aleatorios distribuidos uniformemente y el paquete de parámetros par0.

Un paquete de parámetros es un objeto que almacena todos los parámetros necesarios para una distribución. Contiene:

  • typedef distribution-type distribution_type es el tipo de su distribución.

  • Uno o más constructores que toman las mismas listas de parámetros que los constructores de distribución.

  • Las mismas funciones de parameter-access que la distribución.

  • Operadores de comparación de igualdad y desigualdad.

La biblioteca puede compilarse como versión comprobada y como no comprobada. La versión comprobada utiliza una macro similar a la macro assert de C para probar las condiciones marcadas como Precondition en las descripciones funcionales. Para usar la versión comprobada, defina la macro _RNG_CHECK o _DEBUG en un valor numérico distinto de cero en todo el código que usa la biblioteca.

El ejemplo de código siguiente utiliza un generador de números aleatorios uniformemente distribuidos para intercambiar el contenido de un vector.

// cl.exe /EHsc /nologo /W4 /MTd
#include <algorithm>
#include <array>
#include <iostream>
#include <ostream>
#include <random>
#include <string>
#include <vector>
using namespace std;

template <typename C> void print(const C& c) {
    for (const auto& e : c) {
        cout << e << " ";
    }

    cout << endl;
}

void test(unsigned int seed) {
    cout << "Seed: " << seed << endl;

    mt19937 engine(seed);

    uniform_int_distribution<int> dist(-3, 5);

    vector<int> v;

    for (int i = 0; i < 30; ++i) {
        v.push_back(dist(engine));
    }

    cout << "Randomized vector: ";
    print(v);

    array<string, 26> arr = { { "H", "He", "Li", "Be", "B", "C", "N", "O", "F",
        "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc",
        "Ti", "V", "Cr", "Mn", "Fe" } };

    shuffle(arr.begin(), arr.end(), engine);

    cout << "Randomized array: ";
    print(arr);
}

int main() {
    cout << "--" << endl;

    test(12345);

    cout << "--" << endl;

    random_device rd;

    test(rd());
}

Bb982398.collapse_all(es-es,VS.120).gifClases

bernoulli_distribution (Clase)

Genera una distribución de Bernoulli.

binomial_distribution (Clase)

Genera una distribución binomial.

cauchy_distribution (Clase)

Genera una distribución de Cauchy.

chi_squared_distribution (Clase)

Genera una distribución ji cuadrada.

discard_block (Clase)

Genera una secuencia aleatoria al descartar los valores devueltos por el motor base. Conservado para la compatibilidad TR1.

discard_block_engine (Clase)

Genera una secuencia aleatoria al descartar los valores devueltos por el motor base.

discrete_distribution (Clase)

Genera una distribución de entero discreto.

exponential_distribution (Clase)

Genera una distribución exponencial.

extreme_value_distribution (Clase)

Genera una distribución de valor final.

fisher_f_distribution (Clase)

Genera una distribución F de Fisher.

gamma_distribution (Clase)

Genera una distribución gamma.

geometric_distribution (Clase)

Genera una distribución geométrica.

independent_bits_engine (Clase)

Genera una secuencia aleatoria con un número especificado de bits al volver a empaquetar los bits de los valores devueltos por el motor base.

linear_congruential (Clase)

Genera una secuencia aleatoria mediante el algoritmo congruente lineal. Conservado para la compatibilidad TR1.

linear_congruential_engine (Clase)

Genera una secuencia aleatoria mediante el algoritmo congruente lineal.

lognormal_distribution (Clase)

Genera una distribución log-normal.

mersenne_twister (Clase)

Genera una secuencia aleatoria mediante el algoritmo de tornado de Mersenne. Conservado para la compatibilidad TR1.

mersenne_twister_engine (Clase)

Genera una secuencia aleatoria mediante el algoritmo de tornado de Mersenne.

negative_binomial_distribution (Clase)

Genera una distribución binomial negativa.

normal_distribution (Clase)

Genera una distribución normal.

piecewise_constant_distribution (Clase)

Genera una distribución constante por trozos.

piecewise_linear_distribution (Clase)

Genera una distribución lineal por trozos.

poisson_distribution (Clase)

Genera una distribución de Poisson.

random_device (Clase)

Genera una secuencia aleatoria mediante un dispositivo externo.

seed_seq (Clase)

Almacena un vector de valores enteros sin signo que puede proporcionar una inicialización aleatoria para un motor de números aleatorios.

shuffle_order_engine (Clase)

Genera una secuencia aleatoria al reordenar los valores devueltos del motor base.

student_t_distribution (Clase)

Genera una distribución T de Student.

subtract_with_carry (Clase)

Genera una secuencia aleatoria mediante el algoritmo de resta con llevadas. Conservado para la compatibilidad TR1.

subtract_with_carry_01 (Clase)

Genera una secuencia aleatoria mediante el algoritmo de restas con llevada de punto flotante. Conservado para la compatibilidad TR1.

subtract_with_carry_engine (Clase)

Genera una secuencia aleatoria mediante el algoritmo de resta con llevadas.

uniform_int (Clase)

Genera una distribución de entero uniforme. Conservado para la compatibilidad TR1.

uniform_int_distribution (Clase)

Genera una distribución de entero uniforme.

uniform_real (Clase)

Genera una distribución de punto flotante uniforme. Conservado para la compatibilidad TR1.

uniform_real_distribution (Clase)

Genera una distribución de punto flotante uniforme.

variate_generator (Clase)

Incluye un motor y una distribución.

weibull_distribution (Clase)

Genera una distribución de Weibull.

xor_combine (Clase)

Genera una distribución combinada.

Bb982398.collapse_all(es-es,VS.120).gifTypedefs

default_random_engine (TypeDef)

Definición de tipos para el motor predeterminado.

knuth_b (TypeDef)

Definición de tipos para un motor de orden de intercambio.

minstd_rand0 (TypeDef)

Definición de tipos para un motor de congruencia lineal.

minstd_rand (TypeDef)

Definición de tipos para un motor de congruencia lineal.

mt19937 (TypeDef)

Definición de tipos para un motor Mersenne twister.

mt19937_64 (TypeDef)

Definición de tipos para un motor Mersenne twister.

ranlux_base_01 (TypeDef)

Definición de tipo para una resta de punto flotante con motor de acarreo.

ranlux3 (TypeDef)

Definición de tipo para una resta con motor de acarreo.

ranlux3_01 (TypeDef)

Definición de tipo para una resta de punto flotante con motor de acarreo.

ranlux4 (TypeDef)

Definición de tipo para una resta con motor de acarreo.

ranlux4_01 (TypeDef)

Definición de tipo para una resta de punto flotante con motor de acarreo.

ranlux24 (TypeDef)

Definición de tipos para un motor de bloques descartado.

ranlux24_base (TypeDef)

Definición de tipo para una resta con motor de acarreo.

ranlux48 (TypeDef)

Definición de tipos para un motor de bloques descartado.

ranlux48_base (TypeDef)

Definición de tipo para una resta con motor de acarreo.

ranlux64_base_01 (TypeDef)

Definición de tipo para una resta de punto flotante con motor de acarreo.

Bb982398.collapse_all(es-es,VS.120).gifOperadores

operator== <random>

Compruebe si el motor del lado izquierdo del operador es igual que el motor del lado derecho.

operator!= <random>

Compruebe si el motor del lado izquierdo del operador no es igual que el motor del lado derecho.

operator<< <random>

Escribe la información de estado en el flujo.

operator>> <random>

Extrae la información de estado de una secuencia.

Bb982398.collapse_all(es-es,VS.120).gifFunciones

generate_canonical

Devuelve un valor de punto flotante de una secuencia aleatoria.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft