std:: uniform_real_distribution
|
Definido en el encabezado
<random>
|
||
|
template
<
class
RealType
=
double
>
class uniform_real_distribution ; |
(desde C++11) | |
Genera valores de punto flotante aleatorios x , distribuidos uniformemente en el intervalo [a, b) , es decir, distribuidos según la función de densidad de probabilidad:
-
P(x|a,b) =
.1 b − a
std::uniform_real_distribution
satisface todos los requisitos de
RandomNumberDistribution
.
Contenidos |
Parámetros de plantilla
| RealType | - | El tipo de resultado generado por el generador. El efecto es indefinido si este no es uno de float , double , o long double . |
Tipos de miembros
| Tipo de miembro | Definición |
result_type
(C++11)
|
RealType |
param_type
(C++11)
|
el tipo del conjunto de parámetros, ver RandomNumberDistribution . |
Funciones miembro
|
(C++11)
|
construye nueva distribución
(función miembro pública) |
|
(C++11)
|
reinicia el estado interno de la distribución
(función miembro pública) |
Generación |
|
|
(C++11)
|
genera el siguiente número aleatorio en la distribución
(función miembro pública) |
Características |
|
|
(C++11)
|
devuelve los parámetros de la distribución
(función miembro pública) |
|
(C++11)
|
obtiene o establece el objeto de parámetros de distribución
(función miembro pública) |
|
(C++11)
|
devuelve el valor mínimo potencialmente generado
(función miembro pública) |
|
(C++11)
|
devuelve el valor máximo potencialmente generado
(función miembro pública) |
Funciones no miembro
|
(C++11)
(C++11)
(removed in C++20)
|
compara dos objetos de distribución
(función) |
|
(C++11)
|
realiza entrada y salida de flujo en la distribución de números pseudoaleatorios
(plantilla de función) |
Notas
Es difícil crear una distribución sobre el intervalo cerrado [a, b] a partir de esta distribución. Usar std:: nextafter ( b, std:: numeric_limits < RealType > :: max ( ) ) como segundo parámetro no siempre funciona debido al error de redondeo.
La mayoría de las implementaciones existentes tienen un error donde ocasionalmente pueden devolver
b
(
GCC #63176
LLVM #18767
MSVC STL #1074
). Originalmente se pensaba que esto solo ocurría cuando
RealType
es
float
y cuando
LWG issue 2524
está presente, pero desde entonces se ha demostrado que
ninguno de los dos es necesario para desencadenar el error
.
Ejemplo
Imprime 10 números aleatorios entre 1 y 2.
#include <iostream> #include <random> int main() { std::random_device rd; // Will be used to obtain a seed for the random number engine std::mt19937 gen(rd()); // Standard mersenne_twister_engine seeded with rd() std::uniform_real_distribution<> dis(1.0, 2.0); for (int n = 0; n < 10; ++n) // Use dis to transform the random unsigned int generated by gen into a // double in [1, 2). Each call to dis(gen) generates a new random double. std::cout << dis(gen) << ' '; std::cout << '\n'; }
Salida posible:
1.80829 1.15391 1.18483 1.38969 1.36094 1.0648 1.97798 1.27984 1.68261 1.57326
Enlaces externos
| Generación de números de punto flotante aleatorios en un intervalo — © 2022. Frédéric Goualard, Université de Nantes. |