consteig
Compile-time eigenvalue and eigenvector computation for C++17
Loading...
Searching...
No Matches
Functions
Math Functions

Constexpr mathematical functions with no standard library dependency. More...

Functions

template<typename T >
constexpr T consteig::abs (const T x)
 Absolute value of a real number.
 
template<typename T >
constexpr Complex< Tconsteig::csqrt (const T x)
 Complex-valued square root of a real number.
 
template<typename T >
constexpr auto consteig::exp (const T x) noexcept
 Computes the exponential of a real number.
 
template<typename T >
constexpr T consteig::pow (const T x, const unsigned int n)
 Raise x to an unsigned integer power via exponentiation by squaring.
 
template<typename T >
constexpr T consteig::pow (const T x, const int n)
 Raise x to a signed integer power.
 
template<typename T >
constexpr T consteig::sgn (const T x)
 Signum function: returns +1, -1, or 0.
 
template<typename T >
constexpr T consteig::sqrt (const T x)
 Constexpr square root.
 
template<typename T >
constexpr auto consteig::sin (const T x) noexcept
 Computes the sine of x (in radians).
 
template<typename T >
constexpr auto consteig::cos (const T x) noexcept
 Computes the cosine of x (in radians).
 
template<typename T >
constexpr auto consteig::tan (const T x) noexcept
 Computes the tangent of x (in radians) as sin_series(r) / cos_series(r), where r = trig_reduce(x).
 
template<typename T >
constexpr bool consteig::is_float (T const &)
 Returns true if T is a floating-point type (value overload).
 
template<typename T >
constexpr bool consteig::is_float ()
 Returns true if T is a floating-point type (type-only overload).
 
template<typename T >
constexpr T consteig::epsilon ()
 Machine epsilon for type T.
 

Detailed Description

Constexpr mathematical functions with no standard library dependency.

Function Documentation

◆ abs()

template<typename T >
constexpr T consteig::abs ( const T x)
constexpr

Absolute value of a real number.

Returns |x|. Handles signed zero correctly (returns positive zero).

Template Parameters
TNumeric type.
Parameters
xInput value.
Returns
Non-negative absolute value of x.

◆ csqrt()

template<typename T >
constexpr Complex< T > consteig::csqrt ( const T x)
constexpr

Complex-valued square root of a real number.

For non-negative x, returns {sqrt(x), 0}. For negative x, returns {0, sqrt(|x|)} (purely imaginary result). Use this instead of sqrt when the input may be negative.

Template Parameters
TNumeric type.
Parameters
xInput value (may be negative).
Returns
Complex<T> square root.

◆ pow() [1/2]

template<typename T >
constexpr T consteig::pow ( const T x,
const unsigned int n )
constexpr

Raise x to an unsigned integer power via exponentiation by squaring.

Template Parameters
TNumeric type.
Parameters
xBase value.
nNon-negative exponent.
Returns
x^n.

◆ pow() [2/2]

template<typename T >
constexpr T consteig::pow ( const T x,
const int n )
constexpr

Raise x to a signed integer power.

Negative exponents compute 1 / x^|n|.

Template Parameters
TNumeric type.
Parameters
xBase value.
nInteger exponent (may be negative).
Returns
x^n.

◆ sgn()

template<typename T >
constexpr T consteig::sgn ( const T x)
constexpr

Signum function: returns +1, -1, or 0.

Template Parameters
TNumeric type.
Parameters
xInput value.
Returns
+1 if x > 0, -1 if x < 0, 0 if x == 0.

◆ sqrt()

template<typename T >
constexpr T consteig::sqrt ( const T x)
constexpr

Constexpr square root.

For floating-point types, uses Newton's method with range reduction. For integer types, returns the floor of the exact square root. Negative inputs produce a poison value (compile-time error in constexpr context); use csqrt if the input may be negative.

Template Parameters
TNumeric type.
Parameters
xNon-negative input value.
Returns
Square root of x.

◆ tan()

template<typename T >
constexpr auto consteig::tan ( const T x)
constexprnoexcept

Computes the tangent of x (in radians) as sin_series(r) / cos_series(r), where r = trig_reduce(x).

NOTE: tan has singularities where cos_series(r) == 0 (x = pi/2 + k*pi for integer k). Near these points the result can be very large, +/-infinity, or NaN. This function does not clamp or guard against those cases.

◆ is_float() [1/2]

template<typename T >
constexpr bool consteig::is_float ( T const & )
constexpr

Returns true if T is a floating-point type (value overload).

Template Parameters
TType to test.

◆ is_float() [2/2]

template<typename T >
constexpr bool consteig::is_float ( )
constexpr

Returns true if T is a floating-point type (type-only overload).

Recognized floating-point types: float, double, long double. All other types (including integer types) return false.

Template Parameters
TType to test.
static_assert(consteig::is_float<double>(), "");
static_assert(!consteig::is_float<int>(), "");
constexpr T epsilon()
Machine epsilon for type T.
Definition utilities.hpp:82

◆ epsilon()

template<typename T >
constexpr T consteig::epsilon ( )
constexpr

Machine epsilon for type T.

Returns the smallest value eps such that 1 + eps != 1 in type T. Hardcoded for float and double to IEEE 754 values for O(1) constexpr performance. Falls back to iterative computation for long double and other types.

For non-floating-point types, returns T(0).

Template Parameters
TNumeric type.
Returns
Machine epsilon, or T(0) for integer types.