Générateur pseudo-aléatoire léger (SplitMix64), à graine explicite.
More...
#include <DeterministicRandom.h>
|
| | DeterministicRandom (std::uint64_t seed) noexcept |
| std::uint32_t | nextUInt32 () noexcept |
| float | nextFloat01 () noexcept |
| float | nextRange (float min, float max) noexcept |
| | Prochain flottant dans [min, max].
|
| int | nextInt (int min, int max) noexcept |
| | Prochain entier dans [min, max], bornes comprises, sans biais modulo.
|
Générateur pseudo-aléatoire léger (SplitMix64), à graine explicite.
Aucune dépendance à <random> ni à l'horloge système : deux instances construites avec la même graine produisent exactement la même suite de valeurs (EX-NFR-002). Utilisé par core::ParticleSystem (LOT-53), où tout tirage doit rester reproductible d'une exécution à l'autre pour une même séquence d'entrées.
◆ DeterministicRandom()
| core::DeterministicRandom::DeterministicRandom |
( |
std::uint64_t | seed | ) |
|
|
inlineexplicitnoexcept |
- Parameters
-
| seed | Graine explicite (jamais issue de l'horloge ou d'un générateur par défaut). |
◆ nextFloat01()
| float core::DeterministicRandom::nextFloat01 |
( |
| ) |
|
|
inlinenodiscardnoexcept |
- Returns
- Le prochain flottant dans [0, 1[.
◆ nextInt()
| int core::DeterministicRandom::nextInt |
( |
int | min, |
|
|
int | max ) |
|
inlinenodiscardnoexcept |
Prochain entier dans [min, max], bornes comprises, sans biais modulo.
nextUInt32() % n est la forme évidente, et elle est fausse : 2³² n'est pas un multiple de n, si bien que les 2³² mod n premières valeurs sortent une fois de plus que les autres. Sur un d20 le biais est d'environ un dix-millionième — négligeable —, mais il est systématique et va toujours dans le même sens, et il rendrait indéfendable toute mesure de distribution faite sur ce générateur. Le corriger coûte une boucle qui ne tourne pratiquement jamais.
La méthode est celle du rejet : on écarte la queue de l'intervalle qui dépasse le dernier multiple complet de n. Le nombre d'itérations est fini avec probabilité 1, et sa moyenne est inférieure à 2 pour tout n réaliste.
- Parameters
-
| min | Borne inférieure, comprise. |
| max | Borne supérieure, comprise. Si max <= min, renvoie min sans tirer — un intervalle vide n'est pas une erreur, c'est une valeur fixe. |
- Returns
- L'entier tiré.
◆ nextRange()
| float core::DeterministicRandom::nextRange |
( |
float | min, |
|
|
float | max ) |
|
inlinenodiscardnoexcept |
Prochain flottant dans [min, max].
- Parameters
-
| min | Borne inférieure. |
| max | Borne supérieure ; si égale à min, renvoie exactement min (aucun tirage discriminant, utile pour une durée de vie ou une vitesse fixe). |
- Returns
- La valeur tirée.
◆ nextUInt32()
| std::uint32_t core::DeterministicRandom::nextUInt32 |
( |
| ) |
|
|
inlinenodiscardnoexcept |
- Returns
- Le prochain entier 32 bits de la suite.
◆ _state
| std::uint64_t core::DeterministicRandom::_state |
|
private |
The documentation for this class was generated from the following file: