std:: subtract_with_carry_engine
|
Definido en el encabezado
<random>
|
||
|
template
<
class
UIntType,
|
(desde C++11) | |
Es un motor de números aleatorios que utiliza el algoritmo de resta con acarreo .
Contenidos |
Parámetros de plantilla
| UIntType | - | El tipo de resultado generado por el generador. El efecto es indefinido si este no es uno de unsigned short , unsigned int , unsigned long , o unsigned long long . |
| w | - | el tamaño de palabra, en bits, de la secuencia de estado |
| s | - | el retardo corto |
| r | - | el retardo largo |
Si
w
no está en
[
1
,
std::
numeric_limits
<
UIntType
>
::
digits
]
, o
s
no está en
[
1
,
r
)
, el programa está mal formado.
Propiedades del generador
El
tamaño
de los estados de
subtract_with_carry_engine
es
O(r)
, cada uno de ellos consiste en dos partes:
-
Una secuencia
X
de
r
valores enteros, donde cada valor está en
[ 0 ,2w
). - Un entero c (conocido como el carry ), cuyo valor es 0 o 1 .
Dado que
X
j
representa el
j-ésimo valor módulo r
(comenzando desde 0) de
X
, el
algoritmo de transición
de
subtract_with_carry_engine
(
TA(x
i
)
) se define como sigue:
- Sea Y igual a X i-s -X i-r -c .
-
Sea
y
igual a
Y mod 2
w
, y establezca X i a y . - Si Y es negativo, establezca c a 1 , de lo contrario establezca c a 0 .
El
algoritmo de generación
de
subtract_with_carry_engine
es
GA(x
i
) = y
, donde
y
es el valor producido en el paso 2 del algoritmo de transición.
Especializaciones predefinidas
Las siguientes especializaciones definen el motor de números aleatorios con dos conjuntos de parámetros de uso común:
|
Definido en el encabezado
<random>
|
|
| Tipo | Definición |
ranlux24_base
(C++11)
|
std :: subtract_with_carry_engine < std:: uint_fast32_t , 24 , 10 , 24 > |
ranlux48_base
(C++11)
|
std :: subtract_with_carry_engine < std:: uint_fast64_t , 48 , 5 , 12 > |
Tipos anidados
| Tipo | Definición |
result_type
|
UIntType
|
Miembros de datos
|
constexpr
std::size_t
word_size
[static]
|
w
(constante de miembro público estático) |
|
constexpr
std::size_t
short_lag
[static]
|
s
(constante de miembro público estático) |
|
constexpr
std::size_t
long_lag
[static]
|
r
(constante de miembro público estático) |
|
constexpr
std::uint_least32_t
default_seed
[static]
|
19780503u
(constante de miembro público estático) |
Funciones miembro
Construcción y Semilla |
|
|
construye el motor
(función miembro pública) |
|
|
establece el estado actual del motor
(función miembro pública) |
|
Generación |
|
|
avanza el estado del motor y devuelve el valor generado
(función miembro pública) |
|
|
avanza el estado del motor en una cantidad especificada
(función miembro pública) |
|
Características |
|
|
[static]
|
obtiene el valor más pequeño posible en el rango de salida
(función miembro estática pública) |
|
[static]
|
obtiene el valor más grande posible en el rango de salida
(función miembro estática pública) |
Funciones no miembro
|
(C++11)
(C++11)
(removed in C++20)
|
compara los estados internos de dos motores de números pseudoaleatorios
(función) |
|
(C++11)
|
realiza entrada y salida por flujo en el motor de números pseudoaleatorios
(plantilla de función) |
Ejemplo
|
Esta sección está incompleta
Razón: sin ejemplo |
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3809 | C++11 |
default_seed
podría no ser
representable con
result_type
|
cambió su tipo a
std::uint_least32_t |