C++ named requirements: RandomNumberEngine (since C++11)
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:
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 :
|
(C++11)
|
implementa el algoritmo
congruencial lineal
(plantilla de clase) |
|
(C++11)
|
implementa el algoritmo
Mersenne twister
(plantilla de clase) |
|
(C++11)
|
implementa un algoritmo de resta con acarreo (
Fibonacci retardado
)
(plantilla de clase) |
|
(C++26)
|
un generador paralelizable basado en contador
(plantilla de clase) |
|
(C++11)
|
descarta parte de la salida de un motor de números aleatorios
(plantilla de clase) |
|
(C++11)
|
empaqueta la salida de un motor de números aleatorios en bloques de un número específico de bits
(plantilla de clase) |
|
(C++11)
|
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 :
|
(C++11)
|
generador de números aleatorios no determinista que utiliza una fuente de entropía de hardware
(clase) |