12#if HX_USE_MACROS_WITH_MODULE
13#error Header does not provide macros alone.
42 hxassertmsg(
static_cast<float>(size_) <
float{0x01000000u},
43 "insufficient_precision %f",
static_cast<float>(size_));
44 return base_ +
static_cast<T_
>(
static_cast<float>(size_) * this->
f01());
52 "insufficient_precision %f", size_);
53 return base_ + size_ * this->
d01();
59 return base_ +
static_cast<int64_t
>(this->
u64() %
static_cast<uint64_t
>(size_));
65 return base_ + this->
u64() % size_;
73 uint8_t* chars_ =
static_cast<uint8_t*
>(bytes_);
75 const uint32_t x_ = this->
u32();
76 ::memcpy(chars_, &x_, 4u);
81 const uint32_t x_ = this->
u32();
82 ::memcpy(chars_, &x_,
static_cast<size_t>(count_));
88 return static_cast<uint8_t
>(this->
u32());
93 return static_cast<uint16_t
>(this->
u32());
98 m_state_ = uint64_t{0x5851f42d4c957f2dull} * m_state_ + uint64_t{0x14057b7ef767814full};
105 const uint32_t result_ =
static_cast<uint32_t
>(m_state_ >> ((m_state_ >> 60) + 13u));
111 const uint64_t result_ =
static_cast<uint64_t
>(this->
u32())
112 | (
static_cast<uint64_t
>(this->
u32()) << 32);
120 return static_cast<float>(this->
u32() >> 8) * (1.0f / 16777216.0f);
127 return static_cast<double>(this->
u64() >> 11) * (1.0 / 9007199254740992.0);
constexpr uint32_t operator()(void)
Returns [0..2^32).
Definition hxrandom.hpp:31
constexpr uint64_t range(uint64_t base_, uint64_t size_)
uint64_t version. Zero size is undefined.
Definition hxrandom.hpp:63
constexpr hxrandom(uint64_t stream_=1u)
Constructor to initialize the random number generator.
Definition hxrandom.hpp:28
constexpr double d01(void)
Returns a double between [0..1).
Definition hxrandom.hpp:125
constexpr uint8_t u8(void)
Returns [0..2^8).
Definition hxrandom.hpp:87
constexpr uint64_t u64(void)
Returns [0..2^64).
Definition hxrandom.hpp:110
constexpr double range(double base_, double size_)
double version.
Definition hxrandom.hpp:48
constexpr uint16_t u16(void)
Returns [0..2^16).
Definition hxrandom.hpp:92
constexpr T range(T base_, T size_)
Returns a random number in the range [base..base+range).
Definition hxrandom.hpp:39
void read(void *bytes_, hxsize_t count_)
Reads a specified number of random bytes into the provided buffer.
Definition hxrandom.hpp:72
constexpr uint32_t u32(void)
Returns [0..2^32).
Definition hxrandom.hpp:97
constexpr float f01(void)
Returns a float between [0..1).
Definition hxrandom.hpp:118
constexpr int64_t range(int64_t base_, int64_t size_)
int64_t version. Negative or zero size is undefined.
Definition hxrandom.hpp:57
#define hxinline
hxinline - Force a function to be inlined into its callers.
Definition hxsettings.h:120
#define hxattr_nonnull(...)
hxattr_nonnull - Indicates that a function has args that should not be null.
Definition hxsettings.h:97
#define hxattr_nodiscard
hxattr_nodiscard - Indicates the caller should not discard the return value.
Definition hxsettings.h:89
#define hxconstexpr
hxconstexpr - Enables C++23 compatable constexpr usage for functions as that has support for destruct...
Definition hxsettings.h:263
Provides core macros, memory management and feature detection.
#define hxassertmsg(x_,...)
hxassertmsg(bool x, ...) - Logs an error and terminates execution if x is false.
Definition libhatchet.h:101
ptrdiff_t hxsize_t
hxsize_t - A signed size type, same as ssize_t or ptrdiff_t.
Definition libhatchet.h:209