tlx
Loading...
Searching...
No Matches
power_to_the.hpp
Go to the documentation of this file.
1/*******************************************************************************
2 * tlx/math/power_to_the.hpp
3 *
4 * power_to_the<D>(x) raises x to the D-th power using log(D) unrolled
5 * multiplications.
6 *
7 * Part of tlx - http://panthema.net/tlx
8 *
9 * Copyright (C) 2019 Manuel Penschuck <tlx@manuel.jetzt>
10 *
11 * All rights reserved. Published under the Boost Software License, Version 1.0
12 ******************************************************************************/
13
14#ifndef TLX_MATH_POWER_TO_THE_HEADER
15#define TLX_MATH_POWER_TO_THE_HEADER
16
17#include <tlx/math/div_ceil.hpp>
18
19namespace tlx {
20
21//! \addtogroup tlx_math
22//! \{
23
24/******************************************************************************/
25//! power_to_the<D>(x)
26
27//! returns x raised to the power of D using log(D) explicit multiplications.
28template <unsigned D, typename T>
29static inline constexpr
31 // Compiler optimize two calls to the same recursion into one
32 // Tested with GCC 4+, Clang 3+, MSVC 15+
33 return D < 1 ? 1
34 : D == 1 ? x
35 : power_to_the<D / 2>(x) * power_to_the<div_ceil(D, 2)>(x);
36}
37
38//! \}
39
40} // namespace tlx
41
42#endif // !TLX_MATH_POWER_TO_THE_HEADER
43
44/******************************************************************************/
static constexpr auto div_ceil(const IntegralN &n, const IntegralK &k) -> decltype(n+k)
calculate n div k with rounding up, for n and k positive!
Definition: div_ceil.hpp:25
static constexpr T power_to_the(T x)
power_to_the<D>(x)