Namespaces
Variants

std:: subtract_with_carry_engine

From cppreference.net
Definido en el encabezado <random>
template <

class UIntType,
std:: size_t w, std:: size_t s, std:: size_t r

> class subtract_with_carry_engine ;
(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 , 2 w
    )
    .
  • 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:

  1. Sea Y igual a X i-s -X i-r -c .
  2. Sea y igual a Y mod 2 w
    , y establezca X i a y .
  3. 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)
realiza entrada y salida por flujo en el motor de números pseudoaleatorios
(plantilla de función)

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