23 namespace seqan3::detail
53 template <std::
unsigned_
integral
unsigned_t>
54 constexpr unsigned_t floor_log2(unsigned_t
const n) noexcept
87 template <std::
unsigned_
integral
unsigned_t>
88 constexpr unsigned_t ceil_log2(unsigned_t
const n) noexcept
91 return (n == 1u) ? 0u : seqan3::detail::floor_log2(n - 1u) + 1u;
120 template <
typename base_t, std::
unsigned_
integral exp_t>
122 requires (std::same_as<base_t, uint64_t> || std::same_as<base_t, int64_t>)
124 base_t
pow(base_t base, exp_t exp)
131 for (exp_t i = 0; i < exp; ++i)
136 " will result in an " + (std::same_as<base_t, int64_t> ?
"int64_t" :
"uint64_t")};
145 for (; exp; exp >>= 1, base *= base)
146 result *= (exp & 1) ? base : 1;
153 template <std::
integral base_t, std::
unsigned_
integral exp_t>
154 requires (std::unsigned_integral<base_t> && !std::same_as<base_t, uint64_t>)
155 uint64_t
pow(base_t base, exp_t exp)
157 return pow(
static_cast<uint64_t
>(base), exp);
161 template <std::
integral base_t, std::
unsigned_
integral exp_t>
162 requires (!std::unsigned_integral<base_t> && !std::same_as<base_t, int64_t>)
163 int64_t
pow(base_t base, exp_t exp)
165 return pow(
static_cast<int64_t
>(base), exp);
169 template <
typename base_t,
typename exp_t>
170 requires (!(std::integral<base_t> && std::unsigned_integral<exp_t>))
171 auto pow(base_t base, exp_t exp)
Provides the C++20 <bit> header if it is not already available.
constexpr T bit_width(T x) noexcept
If x is not zero, calculates the number of bits needed to store the value x, that is,...
Definition: bit:154
base_t pow(base_t base, exp_t exp)
Computes the value of base raised to the power exp.
Definition: math.hpp:124
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29