5#ifndef INCLUDE_FIFECHAN_MATH_HPP_
6#define INCLUDE_FIFECHAN_MATH_HPP_
15 static float const FLT_STD_EPSILON = std::numeric_limits<float>::epsilon();
16 static float const FLT_STD_MAX = std::numeric_limits<float>::max();
17 static float const FLT_ZERO_TOLERANCE = 1e-06F;
18 static float const FLT_PI = 4.0F * std::atan(1.0F);
19 static float const FLT_TWO_PI = 2.0F * FLT_PI;
20 static float const FLT_HALF_PI = 0.5F * FLT_PI;
21 static float const FLT_INVERSE_PI = 1.0F / FLT_PI;
22 static float const FLT_INVERSE_TWO_PI = 1.0F / FLT_TWO_PI;
23 static float const FLT_DEG_TO_RAD = FLT_PI / 180.0F;
24 static float const FLT_RAD_TO_DEG = 180.0F / FLT_PI;
25 static float const FLT_LOG_2 = std::numbers::ln2_v<float>;
26 static float const FLT_LOG_10 = std::numbers::ln10_v<float>;
27 static float const FLT_INV_LOG_2 = 1.0F / std::numbers::ln2_v<float>;
28 static float const FLT_INV_LOG_10 = 1.0F / std::numbers::ln10_v<float>;
30 static double const DBL_STD_EPSILON = std::numeric_limits<double>::epsilon();
31 static double const DBL_STD_MAX = std::numeric_limits<double>::max();
32 static double const DBL_ZERO_TOLERANCE = 1e-08;
33 static double const DBL_PI = 4.0 * std::atan(1.0);
34 static double const DBL_TWO_PI = 2.0 * DBL_PI;
35 static double const DBL_HALF_PI = 0.5 * DBL_PI;
36 static double const DBL_INVERSE_PI = 1.0 / DBL_PI;
37 static double const DBL_INVERSE_TWO_PI = 1.0 / DBL_TWO_PI;
38 static double const DBL_DEG_TO_RAD = DBL_PI / 180.0;
39 static double const DBL_RAD_TO_DEG = 180.0F / DBL_PI;
40 static double const DBL_LOG_2 = std::numbers::ln2;
41 static double const DBL_LOG_10 = std::numbers::ln10;
42 static double const DBL_INV_LOG_2 = 1.0 / std::numbers::ln2;
43 static double const DBL_INV_LOG_10 = 1.0 / std::numbers::ln10;
72 return FLT_STD_EPSILON;
77 return FLT_ZERO_TOLERANCE;
102 return FLT_INVERSE_PI;
107 return FLT_INVERSE_TWO_PI;
112 return FLT_DEG_TO_RAD;
117 return FLT_RAD_TO_DEG;
132 return FLT_INV_LOG_2;
137 return FLT_INV_LOG_10;
155 return DBL_STD_EPSILON;
160 return DBL_ZERO_TOLERANCE;
185 return DBL_INVERSE_PI;
190 return DBL_INVERSE_TWO_PI;
195 return DBL_DEG_TO_RAD;
200 return DBL_RAD_TO_DEG;
215 return DBL_INV_LOG_2;
220 return DBL_INV_LOG_10;
232 template <
typename T>
247 return traits_type::epsilon();
253 return traits_type::zeroTolerance();
259 return traits_type::max();
265 return traits_type::pi();
271 return traits_type::twoPi();
277 return traits_type::halfPi();
283 return traits_type::inversePi();
289 return traits_type::inverseTwoPi();
295 return traits_type::degToRad();
301 return traits_type::radToDeg();
307 return traits_type::log2();
313 return traits_type::log10();
319 return traits_type::invLog2();
325 return traits_type::invLog10();
371 static T
Pow(T _base, T _exponent);
386 static bool Equal(T _val1, T _val2);
392 template <
typename T>
395 if (-
static_cast<T
>(1) < _val) {
396 if (_val <
static_cast<T
>(1)) {
397 return static_cast<T
>(std::acos(_val));
400 return static_cast<T
>(0);
409 if (-
static_cast<T
>(1) < _val) {
410 if (_val <
static_cast<T
>(1)) {
411 return static_cast<T
>(std::asin(_val));
423 return static_cast<T
>(std::atan(_val));
429 return static_cast<T
>(std::atan2(_x, _y));
435 return static_cast<T
>(std::ceil(_val));
441 return static_cast<T
>(std::cos(_val));
447 return static_cast<T
>(std::exp(_val));
453 return static_cast<T
>(std::fabs(_val));
459 return static_cast<T
>(std::floor(_val));
465 return static_cast<T
>(std::fmod(_x, _y));
471 return static_cast<T
>(1 / std::sqrt(_val));
477 return static_cast<T
>(std::log(_val));
483 return invLog2() *
static_cast<T
>(std::log(_val));
489 return invLog10() *
static_cast<T
>(std::log(_val));
495 return static_cast<T
>(std::pow(_base, _exponent));
501 return static_cast<T
>(std::sin(_val));
513 return static_cast<T
>(std::sqrt(_val));
519 return static_cast<T
>(std::tan(_val));
525 return std::fabs(_val1 - _val2) <
epsilon();
531 inline unsigned nextPow2(
unsigned x)
Template utility providing math functions and constants for numeric type T.
static num_type log10()
Natural log base 10.
static num_type zeroTolerance()
Recommended zero tolerance for comparisons.
static T Sqrt(T _val)
Square root.
static T ATan(T _val)
Arc tangent.
static num_type invLog10()
1/ln(10) helper.
float_traits< num_type > traits_type
Trait alias providing numeric constants and helpers for num_type.
static T Tan(T _val)
Tangent of value.
static bool Equal(T _val1, T _val2)
Approximate equality check using epsilon.
static num_type inversePi()
1/pi constant.
static T Pow(T _base, T _exponent)
Power function.
static num_type radToDeg()
Radians-to-degrees factor.
static T FMod(T _x, T _y)
Floating-point modulus.
static num_type log2()
Natural log base 2.
static num_type twoPi()
Two times pi.
static T ACos(T _val)
Arc cosine (clamped).
static num_type epsilon()
Returns machine epsilon for the numeric type.
static T Log10(T _val)
Log base 10.
static T Ceil(T _val)
Ceiling of value.
static T Cos(T _val)
Cosine of value.
static num_type pi()
Pi constant.
static T Sin(T _val)
Sine of value.
static T Floor(T _val)
Floor of value.
static T Log2(T _val)
Log base 2.
static T Exp(T _val)
Exponential e^x.
static T Sqr(T _val)
Square of value.
static num_type invLog2()
1/ln(2) helper.
T num_type
Type definitions.
static num_type inverseTwoPi()
1/(2*pi) constant.
static T ASin(T _val)
Arc sine (clamped).
static num_type max()
Maximum finite value for the numeric type.
static T FAbs(T _val)
Absolute value (floating).
static num_type degToRad()
Degrees-to-radians factor.
static T InvSqrt(T _val)
Inverse square root (1/sqrt(x)).
static T ATan2(T _x, T _y)
Two-argument arc tangent.
static num_type halfPi()
Half of pi.
static T Log(T _val)
Natural logarithm.
static float_type invLog2()
1 / ln(2) for double conversions.
static float_type degToRad()
Degrees to radians conversion factor.
static float_type log2()
Natural log base 2 for doubles.
static float_type inversePi()
1/pi constant.
static float_type radToDeg()
Radians to degrees conversion factor.
static float_type twoPi()
Two times pi.
static float_type pi()
Pi constant for double.
static float_type zeroTolerance()
Recommended zero tolerance for double comparisons.
static float_type inverseTwoPi()
1/(2*pi) constant.
static float_type halfPi()
Half of pi.
double float_type
Floating-point typedef for this specialization.
static float_type epsilon()
Machine epsilon for double.
static float_type invLog10()
1 / ln(10) for double conversions.
static float_type log10()
Natural log base 10 for doubles.
static float_type max()
Maximum finite double value.
static float_type inverseTwoPi()
1/(2*pi) constant.
static float_type log2()
Natural log base 2 for floats.
static float_type invLog10()
1 / ln(10) for float conversions.
static float_type invLog2()
1 / ln(2) for float conversions.
static float_type radToDeg()
Radians to degrees conversion factor.
static float_type degToRad()
Degrees to radians conversion factor.
static float_type max()
Maximum finite float value.
static float_type inversePi()
1/pi constant.
static float_type zeroTolerance()
Recommended zero tolerance for float comparisons.
static float_type twoPi()
Two times pi.
static float_type halfPi()
Half of pi.
static float_type pi()
Pi constant for floats.
float float_type
Floating-point typedef for this specialization.
static float_type log10()
Natural log base 10 for floats.
static float_type epsilon()
Machine epsilon for float.
Generic template for floating-point type traits.