Namespaces
Variants

C++ named requirements: RandomNumberEngine (since C++11)

From cppreference.net
C++ named requirements

Un motor de números aleatorios es un objeto función que devuelve valores enteros no negativos de modo que cada valor en el rango de resultados posibles tiene (idealmente) igual probabilidad.

Cualquier motor de números aleatorios es también un UniformRandomBitGenerator , y por lo tanto puede conectarse a cualquier distribución de números aleatorios para obtener un número aleatorio (formalmente, una variable aleatoria).

Requisitos

Un tipo satisface RandomNumberEngine si satisface UniformRandomBitGenerator y, dados los siguientes tipos y valores, se cumplen los requisitos semánticos y de complejidad en la tabla siguiente:

Tipo Definición
E un tipo RandomNumberEngine
T E::result_type
Valor Definición
e un valor de tipo E
v un lvalue de tipo E
x , y valores de tipo (posiblemente calificado con const) E
s un valor de tipo T
q un lvalue SeedSequence
z un valor de tipo unsigned long long
os un lvalue cuyo tipo es una especialización de std::basic_ostream
is un lvalue cuyo tipo es una especialización de std::basic_istream
n el tamaño del estado de E
TA el algoritmo de transición de E
GA el algoritmo de generación de E
Expresión Tipo de retorno Semántica Complejidad
E ( ) N/A Crea un motor con el mismo estado inicial que todos los demás motores de tipo E construidos por defecto. O(n)
E ( x ) Crea un motor que es igual a x . O(n)
E ( s ) Crea un motor cuyo estado inicial está determinado por s . O(n)
E ( q ) Crea un motor cuyo estado inicial está determinado por una única llamada a q.generate . igual que la complejidad de q.generate llamada sobre una secuencia cuya longitud es n
e. seed ( ) void Postcondición: e == E ( ) . igual que E ( )
e. seed ( s ) void Postcondición: e == E ( s ) . igual que E ( s )
e. seed ( q ) void Postcondición: e == E ( q ) . igual que E ( q )
e ( ) T Avanza el estado de e de e i a e i+1 (es decir, TA ( e i ) ) y retorna GA ( e i ) . constante amortizado
e. discard ( z ) void Avanza el estado de e desde e i hasta e i+z por cualquier medio equivalente a z llamadas consecutivas de e ( ) . no peor que la complejidad de z llamadas consecutivas de e ( )
x == y bool Para todo entero positivo i , si las i -ésimas llamadas consecutivas de x ( ) y y ( ) retornan el mismo valor, devuelve true . De lo contrario devuelve false . O(n)
x ! = y bool ! ( x == y ) O(n)
os << x decltype ( os ) & Con los fmtflags establecidos en std:: ios_base :: dec | std:: ios_base :: left y el carácter de relleno establecido como espacio, escribe en os la representación textual del estado actual de x .

Postcondición: los fmtflags de os y el carácter de relleno permanecen igual que antes.

O(n)
is >> v decltype ( is ) & Con fmtflags establecido en std:: ios_base :: dec , lee desde is la representación textual del estado actual de v . Si se encuentra entrada incorrecta, garantiza que el estado de v permanezca inalterado por la operación y llama a is. setstate ( std:: ios_base :: failbit ) (lo cual puede lanzar std::ios_base::failure ).

Precondición: is proporciona una representación textual que fue previamente escrita usando un flujo de salida pr que satisface todas las siguientes condiciones:

  • is. getloc ( ) == pr. getloc ( ) es true .
  • std:: is_same < decltype ( is ) :: char_type ,
    decltype ( pr ) :: char_type > :: value
    es true .
  • std:: is_same < decltype ( is ) :: traits_type ,
    decltype ( pr ) :: traits_type > :: value
    es true .

Postcondición: los fmtflags de is son los mismos que antes.

O(n)

Biblioteca estándar

Las siguientes facilidades de la biblioteca estándar satisfacen RandomNumberEngine :

implementa el algoritmo congruencial lineal
(plantilla de clase)
implementa el algoritmo Mersenne twister
(plantilla de clase)
implementa un algoritmo de resta con acarreo ( Fibonacci retardado )
(plantilla de clase)
un generador paralelizable basado en contador
(plantilla de clase)
descarta parte de la salida de un motor de números aleatorios
(plantilla de clase)
empaqueta la salida de un motor de números aleatorios en bloques de un número específico de bits
(plantilla de clase)
entrega la salida de un motor de números aleatorios en un orden diferente
(plantilla de clase)

Las siguientes facilidades de la biblioteca estándar satisfacen UniformRandomBitGenerator pero no RandomNumberEngine :

generador de números aleatorios no determinista que utiliza una fuente de entropía de hardware
(clase)