1#ifndef CONSTMATH_EXP_HPP
2#define CONSTMATH_EXP_HPP
4#include "../../consteig_options.hpp"
6#include "utilities.hpp"
15constexpr int EXP_MAX_ITER = 50;
18constexpr T exp_cf_recur(
const T x,
const int depth_end)
noexcept
20 int depth = EXP_MAX_ITER - 1;
21 T res =
static_cast<T>(1);
24 res =
static_cast<T>(1) +
x /
static_cast<T>(
depth - 1) -
31template <
typename T>
constexpr T exp_cf(
const T x)
noexcept
33 return static_cast<T>(1) / (
static_cast<T>(1) -
x / exp_cf_recur(
x, 2));
36template <
typename T>
constexpr T find_whole(
const T x)
noexcept
38 return static_cast<T>(
static_cast<long long>(
x));
41template <
typename T>
constexpr T find_fraction(
const T x)
noexcept
43 return x - find_whole(
x);
46template <
typename T>
constexpr T exp_split(
const T x)
noexcept
48 return pow(
static_cast<T>(
E_CONST),
static_cast<int>(find_whole(
x))) *
49 exp_cf(find_fraction(
x));
52template <
typename T>
constexpr T exp_check(
const T x)
noexcept
54 return (
x <
static_cast<T>(0) ?
static_cast<T>(1) / exp_check(-
x)
62template <
typename T>
constexpr auto exp(
const T x)
noexcept
66 return exp_check(
static_cast<double>(
x));
#define E_CONST
Euler's number e to 50 significant digits.
Definition consteig_options.hpp:50
constexpr T pow(const T x, const unsigned int n)
Raise x to an unsigned integer power via exponentiation by squaring.
Definition pow.hpp:17
constexpr auto exp(const T x) noexcept
Computes the exponential of a real number.
Definition exp.hpp:62
constexpr T epsilon()
Machine epsilon for type T.
Definition utilities.hpp:82