51template <std::
unsigned_
integral
unsigned_t>
52constexpr unsigned_t
floor_log2(unsigned_t
const n)
noexcept
85template <std::
unsigned_
integral
unsigned_t>
86constexpr unsigned_t
ceil_log2(unsigned_t
const n)
noexcept
118template <
typename base_t, std::
unsigned_
integral exp_t>
119 requires (std::same_as<base_t, uint64_t> || std::same_as<base_t, int64_t>)
120base_t
pow(base_t base, exp_t exp)
127 auto check = [base](base_t result)
135 return result < std::numeric_limits<base_t>::max() / base;
139 return base < std::numeric_limits<base_t>::min() / result;
143 for (exp_t i = 0; i < exp; ++i)
148 +
" will result in an "
149 + (std::same_as<base_t, int64_t> ?
"int64_t" :
"uint64_t")};
158 for (; exp; exp >>= 1, base *= base)
159 result *= (exp & 1) ? base : 1;
166template <std::
integral base_t, std::
unsigned_
integral exp_t>
167 requires (std::unsigned_integral<base_t> && !std::same_as<base_t, uint64_t>)
168uint64_t
pow(base_t base, exp_t exp)
170 return pow(
static_cast<uint64_t
>(base), exp);
174template <std::
integral base_t, std::
unsigned_
integral exp_t>
175 requires (!std::unsigned_integral<base_t> && !std::same_as<base_t, int64_t>)
176int64_t
pow(base_t base, exp_t exp)
178 return pow(
static_cast<int64_t
>(base), exp);
182template <
typename base_t,
typename exp_t>
183 requires (!(std::integral<base_t> && std::unsigned_integral<exp_t>))
184auto pow(base_t base, exp_t exp)
constexpr unsigned_t floor_log2(unsigned_t const n) noexcept
Computes the floor of the logarithm to the base of two for unsigned integers.
Definition math.hpp:52
constexpr unsigned_t ceil_log2(unsigned_t const n) noexcept
Computes the ceil of the logarithm to the base of two for unsigned integers.
Definition math.hpp:86
base_t pow(base_t base, exp_t exp)
Computes the value of base raised to the power exp.
Definition math.hpp:120
The internal SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
The main SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26