qxLib
float_compare.inl
Go to the documentation of this file.
1 /**
2 
3  @file float_compare.inl
4  @author Khrapov
5  @date 25.09.2025
6  @copyright © Nick Khrapov, 2025. All right reserved.
7 
8 **/
9 
10 namespace qx
11 {
12 
13 template<std::floating_point T>
14 constexpr bool float_compare(T fLeft, T fRight, T fEps)
15 {
16  if (epsilon_equal(fLeft, fRight, fEps))
17  return true;
18 
19  return qx::abs(fLeft - fRight) <= fEps * std::max(abs(fLeft), abs(fRight));
20 }
21 
22 template<class T>
23 constexpr bool epsilon_equal(T left, T right, T eps)
24 {
25  return abs(left - right) < eps;
26 }
27 
28 template<class T>
29 constexpr bool epsilon_zero(T value, T eps)
30 {
31  return abs(value) < eps;
32 }
33 
34 template<class T>
35 constexpr bool epsilon_less_equal(T left, T right, T eps)
36 {
37  return left < right || epsilon_equal(left, right, eps);
38 }
39 
40 template<class T>
41 constexpr bool epsilon_greater_equal(T left, T right, T eps)
42 {
43  return left > right || epsilon_equal(left, right, eps);
44 }
45 
46 } // namespace qx
constexpr bool epsilon_greater_equal(T left, T right, T eps=std::numeric_limits< T >::epsilon())
Constexpr comparison function for a user defined epsilon values.
constexpr bool epsilon_zero(T value, T eps=std::numeric_limits< T >::epsilon())
Constexpr comparison with zero for a user defined epsilon values.
constexpr bool epsilon_less_equal(T left, T right, T eps=std::numeric_limits< T >::epsilon())
Constexpr comparison function for a user defined epsilon values.
constexpr bool epsilon_equal(T left, T right, T eps=std::numeric_limits< T >::epsilon())
Constexpr comparison function for a user defined epsilon values.
constexpr T abs(T value)
Constexpr absolute value.
Definition: common.inl:14