6 constexpr static double PI = 3.14159265358979323846;
13 template<std::
floating_po
int F>
15 if constexpr(std::same_as<DEFAULT_FLOATING_POINT,double>)
return DOUBLE_EPSILON;
16 if constexpr(std::same_as<DEFAULT_FLOATING_POINT,float>)
return FLOAT_EPSILON;
17 else return std::numeric_limits<F>::epsilon();
23 constexpr inline bool isZero(T number)
noexcept{
24 if constexpr(std::integral<T>)
return number == 0;
25 if constexpr(std::same_as<double,T>)
return fabs(number) <
DOUBLE_EPSILON;
26 if constexpr(std::same_as<float,T>)
return fabs(number) <
FLOAT_EPSILON;
30 template<Number T, Number U>
31 constexpr inline bool areEqual(T lhs, U rhs)
noexcept {
32 if constexpr(std::integral<T> && std::integral<U>)
return lhs==rhs;
33 if constexpr(std::integral<T> && std::floating_point<U>)
return isZero(U(lhs)-rhs);
34 if constexpr(std::integral<U> && std::floating_point<T>)
return isZero(T(rhs)-lhs);
35 if constexpr(std::floating_point<T> && std::floating_point<U>)
return isZero(lhs-rhs);
Definition NumericConcepts.hpp:4
constexpr bool areEqual(T lhs, U rhs) noexcept
Definition Constants.hpp:31
static constexpr double RAD_TO_DEG
Definition Constants.hpp:9
static constexpr double DOUBLE_EPSILON
Definition Constants.hpp:10
static constexpr double TWO_PI
Definition Constants.hpp:7
static constexpr double DEG_TO_RAD
Definition Constants.hpp:8
static constexpr DEFAULT_FLOATING_POINT getDefaultEpsilon()
Definition Constants.hpp:14
static constexpr DEFAULT_FLOATING_POINT EPSILON
Definition Constants.hpp:20
static constexpr double PI
Definition Constants.hpp:6
double DEFAULT_FLOATING_POINT
Definition NumericConcepts.hpp:12
constexpr bool isZero(T number) noexcept
Definition Constants.hpp:23
static constexpr float FLOAT_EPSILON
Definition Constants.hpp:11