Fishnet 2.0.1
Framework for Graph-Based Analysis of GIS Vector Data
Loading...
Searching...
No Matches
Constants.hpp
Go to the documentation of this file.
1#pragma once
3#include <cmath>
4
5namespace fishnet::math{
6 constexpr static double PI = 3.14159265358979323846;
7 constexpr static double TWO_PI = 2*PI;
8 constexpr static double DEG_TO_RAD = PI / 180.0;
9 constexpr static double RAD_TO_DEG = 180.0 / PI;
10 constexpr static double DOUBLE_EPSILON = 1e-12;
11 constexpr static float FLOAT_EPSILON=1e-6f;
12
13 template<std::floating_point 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();
18 }
19
20 constexpr static DEFAULT_FLOATING_POINT EPSILON = getDefaultEpsilon<DEFAULT_FLOATING_POINT>();
21
22 template<Number T>
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;
27 return number==0; //default case
28 }
29
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);
36 }
37}
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