Namespaces
Variants

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

From es.cppreference.net
C++ named requirements

Un generador uniforme de bits aleatorios es un objeto función que devuelve valores enteros sin signo de modo que cada valor en el rango de resultados posibles tiene (idealmente) igual probabilidad.

Los generadores uniformes de bits aleatorios no están destinados a ser utilizados como generadores de números aleatorios: se utilizan como fuente de bits aleatorios (generados en bloque, para eficiencia). Cualquier generador uniforme de bits aleatorios puede conectarse a cualquier distribución de números aleatorios para obtener un número aleatorio (formalmente, una variante aleatoria).

Contenido

Requisitos

El tipo G satisface UniformRandomBitGenerator si

Dado g , un valor de tipo G , se satisfacen todas las siguientes condiciones:

  • G::result_type es válido y denota un tipo entero sin signo.
  • Las siguientes expresiones deben ser válidas y tener sus efectos especificados:
(hasta C++20)
Expresión Tipo Requisitos
G :: min ( ) G::result_type
  • Produce el valor más pequeño que el operator ( ) de G puede retornar.
  • El valor resultante es estrictamente menor que G :: max ( ) .
  • La expresión debe ser una expresión constante.
G :: max ( ) G::result_type
  • Produce el valor más grande que el operator ( ) de G puede retornar.
  • El valor resultante es estrictamente mayor que G::min() .
  • La expresión debe ser una expresión constante.
g ( ) G::result_type
  • Retorna un valor en el intervalo cerrado [ G :: min ( ) , G :: max ( ) ] .
  • Tiene complejidad constante amortizada.

Se satisfacen todas las siguientes condiciones:

(desde C++20)

Notas

Todos los RandomNumberEngine s satisfacen este requisito.

Biblioteca estándar

Las siguientes facilidades de la biblioteca estándar esperan un tipo UniformRandomBitGenerator.

(hasta C++17)(C++11)
reordena aleatoriamente elementos en un rango
(plantilla de función & objeto función de algoritmo)
(C++17)
selecciona N elementos aleatorios de una secuencia
(plantilla de función & objeto función de algoritmo)
distribuye uniformemente valores reales de precisión dada en [0, 1)
(plantilla de función)
produce valores enteros distribuidos uniformemente en un rango
(plantilla de clase)
produce valores reales distribuidos uniformemente en un rango
(plantilla de clase)
todas las demás distribuciones de números aleatorios

Las siguientes facilidades de la biblioteca estándar satisfacen UniformRandomBitGenerator sin satisfacer adicionalmente RandomNumberEngine:

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

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 2154
( P0898R3 )
C++11 no estaba claro si G :: min ( ) y G :: max ( )
deben ser expresiones constantes [1]
requerido
  1. ↑ El requisito de complejidad temporal para estas expresiones era "en tiempo de compilación" antes de C++20. La redacción es ambigua, ya que "complejidad temporal en tiempo de compilación" puede interpretarse tanto como "puede evaluarse en tiempo de compilación" y "la complejidad temporal puede determinarse en tiempo de compilación".

Véase también

especifica que un tipo califica como un uniform random bit generator
(concept)