1#ifndef CONSTMATH_TRIG_HPP
2#define CONSTMATH_TRIG_HPP
6#include "../../consteig_options.hpp"
7#include "utilities.hpp"
21template <
typename T>
constexpr T trig_reduce(
const T x)
noexcept
24 T k =
static_cast<T>(
static_cast<long long>(
x /
two_pi));
37template <
typename T>
constexpr T sin_series(
const T x)
noexcept
45 term *= -
x *
x /
static_cast<T>((2 *
n) * (2 *
n + 1));
52template <
typename T>
constexpr T cos_series(
const T x)
noexcept
56 T term =
static_cast<T>(1);
60 term *= -
x *
x /
static_cast<T>((2 *
n - 1) * (2 *
n));
70template <
typename T>
constexpr auto sin(
const T x)
noexcept
74 return sin_series(trig_reduce(
static_cast<double>(
x)));
78 return sin_series(trig_reduce(
x));
85template <
typename T>
constexpr auto cos(
const T x)
noexcept
89 return cos_series(trig_reduce(
static_cast<double>(
x)));
93 return cos_series(trig_reduce(
x));
105template <
typename T>
constexpr auto tan(
const T x)
noexcept
109 const double r = trig_reduce(
static_cast<double>(
x));
110 return sin_series(
r) / cos_series(
r);
114 const T r = trig_reduce(
x);
115 return sin_series(
r) / cos_series(
r);
#define PI_CONST
The constant π to 50 significant digits.
Definition consteig_options.hpp:56
#define CONSTEIG_TRIG_MAX_ITER
Maximum Taylor series iterations for trigonometric functions.
Definition consteig_options.hpp:69
constexpr auto sin(const T x) noexcept
Computes the sine of x (in radians).
Definition trig.hpp:70
constexpr T epsilon()
Machine epsilon for type T.
Definition utilities.hpp:82
constexpr auto tan(const T x) noexcept
Computes the tangent of x (in radians) as sin_series(r) / cos_series(r), where r = trig_reduce(x).
Definition trig.hpp:105
constexpr auto cos(const T x) noexcept
Computes the cosine of x (in radians).
Definition trig.hpp:85