25[[nodiscard]]
constexpr std::uint64_t
splitMix64(std::uint64_t value)
noexcept {
26 value = (value ^ (value >> 30)) * 0xBF58476D1CE4E5B9ULL;
27 value = (value ^ (value >> 27)) * 0x94D049BB133111EBULL;
28 return value ^ (value >> 31);
43[[nodiscard]]
constexpr std::uint64_t
deriveSeed(std::uint64_t baseSeed, std::uint64_t step,
44 std::uint64_t entityId)
noexcept {
66 _state += 0x9E3779B97F4A7C15ULL;
72 constexpr float UINT32_RANGE = 4294967296.0f;
73 return static_cast<float>(
nextUInt32()) / UINT32_RANGE;
83 [[nodiscard]]
float nextRange(
float min,
float max)
noexcept {
106 [[nodiscard]]
int nextInt(
int min,
int max)
noexcept {
110 const std::uint32_t etendue =
static_cast<std::uint32_t
>(max - min) + 1U;
120 const std::uint32_t reste = (std::uint32_t{0} - etendue) % etendue;
122 while (tirage < reste) {
125 return min +
static_cast<int>(tirage % etendue);
float nextRange(float min, float max) noexcept
Prochain flottant dans [min, max].
Definition DeterministicRandom.h:83
std::uint64_t _state
Definition DeterministicRandom.h:129
std::uint32_t nextUInt32() noexcept
Definition DeterministicRandom.h:65
float nextFloat01() noexcept
Definition DeterministicRandom.h:71
DeterministicRandom(std::uint64_t seed) noexcept
Definition DeterministicRandom.h:62
int nextInt(int min, int max) noexcept
Prochain entier dans [min, max], bornes comprises, sans biais modulo.
Definition DeterministicRandom.h:106
Espace de noms du moteur et de la logique de jeu.
Definition Bootstrap.h:9
constexpr std::uint64_t deriveSeed(std::uint64_t baseSeed, std::uint64_t step, std::uint64_t entityId) noexcept
Combine une graine de base, un numéro de pas et un identifiant reproductible en une graine unique,...
Definition DeterministicRandom.h:43
constexpr std::uint64_t splitMix64(std::uint64_t value) noexcept
Mélange (SplitMix64) un entier 64 bits en une valeur bien distribuée.
Definition DeterministicRandom.h:25