std:: uniform_real_distribution
|
Défini dans l'en-tête
<random>
|
||
|
template
<
class
RealType
=
double
>
class uniform_real_distribution ; |
(depuis C++11) | |
Produit des valeurs à virgule flottante aléatoires x , uniformément distribuées sur l'intervalle [a, b) , c'est-à-dire distribuées selon la fonction de densité de probabilité :
-
P(x|a,b) =
.1 b − a
-
P(x|a,b) =
.1 b − a
std::uniform_real_distribution
satisfait toutes les exigences de
RandomNumberDistribution
.
Table des matières |
Paramètres du modèle
| RealType | - | Le type de résultat généré par le générateur. L'effet est indéfini si ce n'est pas l'un des float , double , ou long double . |
Types membres
| Type de membre | Définition |
result_type
(C++11)
|
RealType |
param_type
(C++11)
|
le type du jeu de paramètres, voir RandomNumberDistribution . |
Fonctions membres
|
(C++11)
|
construit une nouvelle distribution
(fonction membre publique) |
|
(C++11)
|
réinitialise l'état interne de la distribution
(fonction membre publique) |
Génération |
|
|
(C++11)
|
génère le prochain nombre aléatoire dans la distribution
(fonction membre publique) |
Caractéristiques |
|
|
(C++11)
|
retourne les paramètres de la distribution
(fonction membre publique) |
|
(C++11)
|
obtient ou définit l'objet paramètre de distribution
(fonction membre publique) |
|
(C++11)
|
retourne la valeur potentiellement générée minimale
(fonction membre publique) |
|
(C++11)
|
retourne la valeur potentiellement générée maximale
(fonction membre publique) |
Fonctions non membres
|
(C++11)
(C++11)
(supprimé en C++20)
|
compare deux objets de distribution
(fonction) |
|
(C++11)
|
effectue des opérations d'entrée/sortie sur flux pour une distribution de nombres pseudo-aléatoires
(modèle de fonction) |
Notes
Il est difficile de créer une distribution sur l'intervalle fermé [a, b] à partir de cette distribution. L'utilisation de std:: nextafter ( b, std:: numeric_limits < RealType > :: max ( ) ) comme second paramètre ne fonctionne pas toujours en raison des erreurs d'arrondi.
La plupart des implémentations existantes contiennent un bogue où elles peuvent occasionnellement retourner
b
(
GCC #63176
LLVM #18767
MSVC STL #1074
). On pensait initialement que cela ne se produisait que lorsque
RealType
est
float
et lorsque
LWG issue 2524
est présent, mais il a depuis été démontré que
aucune de ces conditions n'est nécessaire pour déclencher le bogue
.
Exemple
Afficher 10 nombres aléatoires entre 1 et 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'; }
Sortie possible :
1.80829 1.15391 1.18483 1.38969 1.36094 1.0648 1.97798 1.27984 1.68261 1.57326
Liens externes
| Tirage de nombres flottants aléatoires dans un intervalle — © 2022. Frédéric Goualard, Université de Nantes. |