Namespaces
Variants

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

From 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).

Contenidos

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 .

(until C++17) (C++11)
reordena aleatoriamente elementos en un rango
(function template)
(C++17)
selecciona N elementos aleatorios de una secuencia
(function template)
distribuye uniformemente valores reales de precisión dada a través de [ 0 , 1 )
(function template)
produce valores enteros distribuidos uniformemente a través de un rango
(class template)
produce valores reales distribuidos uniformemente a través de un rango
(class template)
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)