USRP Hardware Driver and USRP Manual Version: 3.15.0.0-MacPorts-Release
UHD and USRP Manual
 
Loading...
Searching...
No Matches
fp_compare_delta.ipp
Go to the documentation of this file.
1//
2// Copyright 2014 Ettus Research LLC
3// Copyright 2018 Ettus Research, a National Instruments Company
4//
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
7
8
9#include <cmath>
10#include <typeinfo>
11
12#ifndef INCLUDED_UHD_UTILS_FLOAT_COMPARE_DELTA_IPP
13#define INCLUDED_UHD_UTILS_FLOAT_COMPARE_DELTA_IPP
14
15
16namespace uhd { namespace math { namespace fp_compare {
17
18 template<typename float_t> UHD_INLINE
19 float_t fp_compare_select_delta(float_t lhs_delta, float_t rhs_delta) {
20 return ((lhs_delta > rhs_delta) ? lhs_delta : rhs_delta);
21 }
22
23 template<> UHD_INLINE
25
26 _value = value;
27 _delta = SINGLE_PRECISION_DELTA;
28 }
29
30 template<> UHD_INLINE
32 _value = value;
33 _delta = DOUBLE_PRECISION_DELTA;
34 }
35
36 template<typename float_t> UHD_INLINE
37 fp_compare_delta<float_t>::fp_compare_delta(float_t value, float_t delta)
38 : _value(value),
39 _delta(delta)
40 { /* NOP */ }
41
42 template<typename float_t> UHD_INLINE
44 : _value(copy._value),
45 _delta(copy._delta)
46 { /* NOP */ }
47
48 template<typename float_t> UHD_INLINE
51
52 template<typename float_t> UHD_INLINE
54 _value = copy._value;
55 _delta = copy._delta;
56 }
57
58 template<typename float_t> UHD_INLINE
60 float_t delta = fp_compare_select_delta(lhs._delta, rhs._delta);
61 return (std::abs(lhs._value - rhs._value) < delta);
62 }
63
64 template<typename float_t> UHD_INLINE
66 return !(lhs == rhs);
67 }
68
69 template<typename float_t> UHD_INLINE
71 float_t delta = fp_compare_select_delta(lhs._delta, rhs._delta);
72 return ((rhs._value - lhs._value) > delta);
73 }
74
75 template<typename float_t> UHD_INLINE
77 return !(lhs > rhs);
78 }
79
80 template<typename float_t> UHD_INLINE
82 float_t delta = fp_compare_select_delta(lhs._delta, rhs._delta);
83 return ((lhs._value - rhs._value) > delta);
84 }
85
86 template<typename float_t> UHD_INLINE
88 return !(lhs < rhs);
89 }
90
91 template<typename float_t> UHD_INLINE
92 bool operator==(fp_compare_delta<float_t> lhs, double rhs) {
93 float_t delta = float_t(fp_compare_select_delta(double(lhs._delta),
94 DOUBLE_PRECISION_DELTA));
95 return (std::abs(lhs._value - rhs) < delta);
96 }
97
98 template<typename float_t> UHD_INLINE
99 bool operator!=(fp_compare_delta<float_t> lhs, double rhs) {
100 return !(lhs == rhs);
101 }
102
103 template<typename float_t> UHD_INLINE
104 bool operator<(fp_compare_delta<float_t> lhs, double rhs) {
105 float_t delta = float_t(fp_compare_select_delta(double(lhs._delta),
106 DOUBLE_PRECISION_DELTA));
107 return ((rhs - lhs._value) > delta);
108 }
109
110 template<typename float_t> UHD_INLINE
111 bool operator<=(fp_compare_delta<float_t> lhs, double rhs) {
112 return !(lhs > rhs);
113 }
114
115 template<typename float_t> UHD_INLINE
116 bool operator>(fp_compare_delta<float_t> lhs, double rhs) {
117 float_t delta = float_t(fp_compare_select_delta(double(lhs._delta),
118 DOUBLE_PRECISION_DELTA));
119 return ((lhs._value - rhs) > delta);
120 }
121
122 template<typename float_t> UHD_INLINE
123 bool operator>=(fp_compare_delta<float_t> lhs, double rhs) {
124 return !(lhs < rhs);
125 }
126
127 template<typename float_t> UHD_INLINE
128 bool operator==(double lhs, fp_compare_delta<float_t> rhs) {
129 float_t delta = fp_compare_select_delta(DOUBLE_PRECISION_DELTA,
130 double(rhs._delta));
131 return (std::abs(lhs - rhs._value) < delta);
132 }
133
134 template<typename float_t> UHD_INLINE
135 bool operator!=(double lhs, fp_compare_delta<float_t> rhs) {
136 return !(lhs == rhs);
137 }
138
139 template<typename float_t> UHD_INLINE
140 bool operator<(double lhs, fp_compare_delta<float_t> rhs) {
141 float_t delta = float_t(fp_compare_select_delta(DOUBLE_PRECISION_DELTA,
142 double(rhs._delta)));
143 return ((rhs._value - lhs) > delta);
144 }
145
146 template<typename float_t> UHD_INLINE
147 bool operator<=(double lhs, fp_compare_delta<float_t> rhs) {
148 return !(lhs > rhs);
149 }
150
151 template<typename float_t> UHD_INLINE
152 bool operator>(double lhs, fp_compare_delta<float_t> rhs) {
153 float_t delta = float_t(fp_compare_select_delta(DOUBLE_PRECISION_DELTA,
154 double(rhs._delta)));
155 return ((lhs - rhs._value) > delta);
156 }
157
158 template<typename float_t> UHD_INLINE
159 bool operator>=(double lhs, fp_compare_delta<float_t> rhs) {
160 return !(lhs < rhs);
161 }
162
163} } } //namespace uhd::math::fp_compare
164
165#endif /* INCLUDED_UHD_UTILS_FLOAT_COMPARE_DELTA_IPP */
UHD_INLINE fp_compare_delta(float_t value)
float_t _delta
Definition math.hpp:183
UHD_INLINE void operator=(const fp_compare_delta &copy)
Definition fp_compare_delta.ipp:53
UHD_INLINE ~fp_compare_delta()
Definition fp_compare_delta.ipp:49
float_t _value
Definition math.hpp:182
#define UHD_INLINE
Definition config.h:53
UHD_INLINE float_t fp_compare_select_delta(float_t lhs_delta, float_t rhs_delta)
Definition fp_compare_delta.ipp:19
UHD_INLINE bool operator!=(fp_compare_delta< float_t > lhs, fp_compare_delta< float_t > rhs)
Definition fp_compare_delta.ipp:65
UHD_INLINE bool operator<=(fp_compare_delta< float_t > lhs, fp_compare_delta< float_t > rhs)
Definition fp_compare_delta.ipp:76
UHD_INLINE bool operator==(fp_compare_delta< float_t > lhs, fp_compare_delta< float_t > rhs)
Definition fp_compare_delta.ipp:59
UHD_INLINE bool operator<(fp_compare_delta< float_t > lhs, fp_compare_delta< float_t > rhs)
Definition fp_compare_delta.ipp:70
UHD_INLINE bool operator>(fp_compare_delta< float_t > lhs, fp_compare_delta< float_t > rhs)
Definition fp_compare_delta.ipp:81
UHD_INLINE bool operator>=(fp_compare_delta< float_t > lhs, fp_compare_delta< float_t > rhs)
Definition fp_compare_delta.ipp:87
Definition build_info.hpp:13