4#ifndef TETL_RANDOM_XORSHIFT_HPP
5#define TETL_RANDOM_XORSHIFT_HPP
7#include <etl/_concepts/unsigned_integral.hpp>
8#include <etl/_cstdint/uint_t.hpp>
9#include <etl/_limits/numeric_limits.hpp>
10#include <etl/_type_traits/is_same.hpp>
17template <unsigned_integral UInt, UInt X, UInt Y, UInt Z>
19 using result_type = UInt;
24 explicit constexpr xorshift(result_type seed)
noexcept
44 constexpr auto discard(
unsigned long long z)
noexcept ->
void
46 for (
auto i{0ULL}; i < z; ++i) {
54 s ^= s << result_type(X);
55 s ^= s >> result_type(Y);
56 s ^= s << result_type(Z);
62 return lhs._state == rhs._state;
80using xorshift32 =
xorshift<uint32_t, 13, 17, 5>;
85using xorshift64 =
xorshift<uint64_t, 13, 7, 17>;
Definition adjacent_find.hpp:9
Definition numeric_limits.hpp:18
https://en.wikipedia.org/wiki/Xorshift
Definition xorshift.hpp:18
constexpr xorshift(result_type seed) noexcept
Definition xorshift.hpp:24
constexpr auto seed(result_type value=default_seed) noexcept -> void
Definition xorshift.hpp:39
constexpr auto discard(unsigned long long z) noexcept -> void
Definition xorshift.hpp:44
static constexpr auto max() noexcept -> result_type
Definition xorshift.hpp:34
friend constexpr auto operator==(xorshift const &lhs, xorshift const &rhs) noexcept -> bool
Definition xorshift.hpp:60
constexpr xorshift()=default
static constexpr auto min() noexcept -> result_type
Definition xorshift.hpp:29
constexpr auto operator()() noexcept -> result_type
Definition xorshift.hpp:51
static constexpr auto default_seed
Definition xorshift.hpp:20