# Group Metaprogramming Math
Metafunctions for mathematical computations.

## Grouped Metafunction Overview

- `__uint64 Log2<NUMERUS>::VALUE;`
  Compute ceiled logarithm to base 2 using metaprogramming.
- `__uint64 Log2Floor<NUMERUS>::VALUE;`
  Compute floored logarithm to base 2 using metaprogramming.
- `__uint64 Power<BASE, EXPONENT>::VALUE;`
  Compute power of a number.

## Grouped Metafunctions Detail

### `__uint64 Log2<NUMERUS>::VALUE;`

Compute ceiled logarithm to base 2 using metaprogramming.

#### Template Parameters

`NUMERUS` | `__int64` value to use for the numerus.

#### Returns

`__uint64` | `ceil(log2(NUMERUS))`

#### Example

        std::cout << Log2<10>::VALUE << "\n";  // => "4"

Snippet from: demos/dox/basic/metaprogramming_math.cpp

### `__uint64 Log2Floor<NUMERUS>::VALUE;`

Compute floored logarithm to base 2 using metaprogramming.

#### Template Parameters

`NUMERUS` | `__int64` value to use for the numerus.

#### Returns

`__uint64` | `floor(log2(NUMERUS))`

#### Example

        std::cout << Log2Floor<10>::VALUE << "\n";  // => "3""

Snippet from: demos/dox/basic/metaprogramming_math.cpp

### `__uint64 Power<BASE, EXPONENT>::VALUE;`

Compute power of a number.

#### Template Parameters

`BASE` | The base of the term (`__int64`).
`EXPONENT` | The exponent of the term (`__int64`).

#### Returns

`__uint64` | be</sup

        std::cout << Power<2, 4>::VALUE << "\n";  // => "16"

Snippet from: demos/dox/basic/metaprogramming_math.cpp

#### Dox Sources

    /*!
     * @defgroup MetaprogrammingMath Metaprogramming Math
     *
     * @brief Metafunctions for mathematical computations.
     *
     * @mfn MetaprogrammingMath#Log2
     *
     * @brief Compute ceiled logarithm to base 2 using metaprogramming.
     *
     * @signature __uint64 Log2<NUMERUS>::VALUE;
     *
     * @tparam NUMERUS <tt>__int64</tt> value to use for the numerus.
     *
     * @return __uint64 <tt>ceil(log2(NUMERUS))</tt>
     *
     * @section Example
     *
     * @snippet demos/dox/basic/metaprogramming_math.cpp log2 call
     *
     *
     *
     * @mfn MetaprogrammingMath#Log2Floor
     *
     * @brief Compute floored logarithm to base 2 using metaprogramming.
     *
     * @signature __uint64 Log2Floor<NUMERUS>::VALUE;
     *
     * @tparam NUMERUS <tt>__int64</tt> value to use for the numerus.
     *
     * @return __uint64 <tt>floor(log2(NUMERUS))</tt>
     *
     * @section Example
     *
     * @snippet demos/dox/basic/metaprogramming_math.cpp log2floor call
     *
     *
     *
     * @mfn MetaprogrammingMath#Power
     *
     * @brief Compute power of a number.
     *
     * @signature __uint64 Power<BASE, EXPONENT>::VALUE;
     *
     * @tparam BASE The base of the term (<tt>__int64</tt>).
     * @tparam EXPONENT The exponent of the term (<tt>__int64</tt>).
     *
     * @return __uint64 b<sup>e</sup
     *
     * @snippet demos/dox/basic/metaprogramming_math.cpp power call
     */