qxLib
float_compare.h
Go to the documentation of this file.
1 /**
2 
3  @file float_compare.h
4  @author Khrapov
5  @date 25.09.2025
6  @copyright © Nick Khrapov, 2025. All right reserved.
7 
8 **/
9 #pragma once
10 
11 #include <qx/math/common.h>
12 
13 #include <limits>
14 
15 namespace qx
16 {
17 
18 /**
19  @brief Tolerance-based floating comparison
20  @tparam T - floating point type
21  @param fLeft - left value
22  @param fRight - right value
23  @param fEps - epsilon value
24  @retval - true if two values are nearly equal based on tolerance-based floating comparison
25 **/
26 template<std::floating_point T>
27 static constexpr bool float_compare(T fLeft, T fRight, T fEps = std::numeric_limits<T>::epsilon());
28 
29 /**
30  @brief Constexpr comparison function for a user defined epsilon values
31  @tparam T - value type
32  @param left - left value
33  @param right - right value
34  @param eps - epsilon value
35  @retval - true if |left - right| < eps
36 **/
37 template<class T>
38 constexpr bool epsilon_equal(T left, T right, T eps = std::numeric_limits<T>::epsilon());
39 
40 /**
41  @brief Constexpr comparison with zero for a user defined epsilon values
42  @tparam T - value type
43  @param value - user value
44  @param eps - epsilon value
45  @retval - true if |value| < eps
46 **/
47 template<class T>
48 constexpr bool epsilon_zero(T value, T eps = std::numeric_limits<T>::epsilon());
49 
50 /**
51  @brief Constexpr comparison function for a user defined epsilon values
52  @tparam T - value type
53  @param left - left value
54  @param right - right value
55  @param eps - epsilon value
56  @retval - true if left < right or |left - right| < eps
57 **/
58 template<class T>
59 constexpr bool epsilon_less_equal(T left, T right, T eps = std::numeric_limits<T>::epsilon());
60 
61 /**
62  @brief Constexpr comparison function for a user defined epsilon values
63  @tparam T - value type
64  @param left - left value
65  @param right - right value
66  @param eps - epsilon value
67  @retval - true if left > right or |left - right| < eps
68 **/
69 template<class T>
70 constexpr bool epsilon_greater_equal(T left, T right, T eps = std::numeric_limits<T>::epsilon());
71 
72 } // namespace qx
73 
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 bool float_compare(T fLeft, T fRight, T fEps)
Tolerance-based floating comparison.