USRP Hardware Driver and USRP Manual Version: 4.4.0.0
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#pragma once
13
14
15namespace uhd { namespace math { namespace fp_compare {
16
17 template<typename float_t> UHD_INLINE
18 float_t fp_compare_select_delta(float_t lhs_delta, float_t rhs_delta) {
19 return ((lhs_delta > rhs_delta) ? lhs_delta : rhs_delta);
20 }
21
22 template<> UHD_INLINE
24
25 _value = value;
26 _delta = SINGLE_PRECISION_DELTA;
27 }
28
29 template<> UHD_INLINE
31 _value = value;
32 _delta = DOUBLE_PRECISION_DELTA;
33 }
34
35 template<typename float_t> UHD_INLINE
36 fp_compare_delta<float_t>::fp_compare_delta(float_t value, float_t delta)
37 : _value(value),
38 _delta(delta)
39 { /* NOP */ }
40
41 template<typename float_t> UHD_INLINE
43 : _value(copy._value),
44 _delta(copy._delta)
45 { /* NOP */ }
46
47 template<typename float_t> UHD_INLINE
49 { /* NOP */ }
50
51 template<typename float_t> UHD_INLINE
53 _value = copy._value;
54 _delta = copy._delta;
55 }
56
57 template<typename float_t> UHD_INLINE
59 float_t delta = fp_compare_select_delta(lhs._delta, rhs._delta);
60 return (std::abs(lhs._value - rhs._value) < delta);
61 }
62
63 template<typename float_t> UHD_INLINE
65 return !(lhs == rhs);
66 }
67
68 template<typename float_t> UHD_INLINE
70 float_t delta = fp_compare_select_delta(lhs._delta, rhs._delta);
71 return ((rhs._value - lhs._value) > delta);
72 }
73
74 template<typename float_t> UHD_INLINE
76 return !(lhs > rhs);
77 }
78
79 template<typename float_t> UHD_INLINE
81 float_t delta = fp_compare_select_delta(lhs._delta, rhs._delta);
82 return ((lhs._value - rhs._value) > delta);
83 }
84
85 template<typename float_t> UHD_INLINE
87 return !(lhs < rhs);
88 }
89
90 template<typename float_t> UHD_INLINE
91 bool operator==(fp_compare_delta<float_t> lhs, double rhs) {
92 float_t delta = float_t(fp_compare_select_delta(double(lhs._delta),
93 DOUBLE_PRECISION_DELTA));
94 return (std::abs(lhs._value - rhs) < delta);
95 }
96
97 template<typename float_t> UHD_INLINE
98 bool operator!=(fp_compare_delta<float_t> lhs, double rhs) {
99 return !(lhs == rhs);
100 }
101
102 template<typename float_t> UHD_INLINE
103 bool operator<(fp_compare_delta<float_t> lhs, double rhs) {
104 float_t delta = float_t(fp_compare_select_delta(double(lhs._delta),
105 DOUBLE_PRECISION_DELTA));
106 return ((rhs - lhs._value) > delta);
107 }
108
109 template<typename float_t> UHD_INLINE
110 bool operator<=(fp_compare_delta<float_t> lhs, double rhs) {
111 return !(lhs > rhs);
112 }
113
114 template<typename float_t> UHD_INLINE
115 bool operator>(fp_compare_delta<float_t> lhs, double rhs) {
116 float_t delta = float_t(fp_compare_select_delta(double(lhs._delta),
117 DOUBLE_PRECISION_DELTA));
118 return ((lhs._value - rhs) > delta);
119 }
120
121 template<typename float_t> UHD_INLINE
122 bool operator>=(fp_compare_delta<float_t> lhs, double rhs) {
123 return !(lhs < rhs);
124 }
125
126 template<typename float_t> UHD_INLINE
127 bool operator==(double lhs, fp_compare_delta<float_t> rhs) {
128 float_t delta = fp_compare_select_delta(DOUBLE_PRECISION_DELTA,
129 double(rhs._delta));
130 return (std::abs(lhs - rhs._value) < delta);
131 }
132
133 template<typename float_t> UHD_INLINE
134 bool operator!=(double lhs, fp_compare_delta<float_t> rhs) {
135 return !(lhs == rhs);
136 }
137
138 template<typename float_t> UHD_INLINE
139 bool operator<(double lhs, fp_compare_delta<float_t> rhs) {
140 float_t delta = float_t(fp_compare_select_delta(DOUBLE_PRECISION_DELTA,
141 double(rhs._delta)));
142 return ((rhs._value - lhs) > delta);
143 }
144
145 template<typename float_t> UHD_INLINE
146 bool operator<=(double lhs, fp_compare_delta<float_t> rhs) {
147 return !(lhs > rhs);
148 }
149
150 template<typename float_t> UHD_INLINE
151 bool operator>(double lhs, fp_compare_delta<float_t> rhs) {
152 float_t delta = float_t(fp_compare_select_delta(DOUBLE_PRECISION_DELTA,
153 double(rhs._delta)));
154 return ((lhs - rhs._value) > delta);
155 }
156
157 template<typename float_t> UHD_INLINE
158 bool operator>=(double lhs, fp_compare_delta<float_t> rhs) {
159 return !(lhs < rhs);
160 }
161
162} } } //namespace uhd::math::fp_compare
UHD_INLINE fp_compare_delta(float_t value)
float_t _delta
Definition math.hpp:213
UHD_INLINE void operator=(const fp_compare_delta &copy)
Definition fp_compare_delta.ipp:52
UHD_INLINE ~fp_compare_delta()
Definition fp_compare_delta.ipp:48
float_t _value
Definition math.hpp:212
#define UHD_INLINE
Definition config.h:65
UHD_INLINE float_t fp_compare_select_delta(float_t lhs_delta, float_t rhs_delta)
Definition fp_compare_delta.ipp:18
UHD_INLINE bool operator!=(fp_compare_delta< float_t > lhs, fp_compare_delta< float_t > rhs)
Definition fp_compare_delta.ipp:64
UHD_INLINE bool operator<=(fp_compare_delta< float_t > lhs, fp_compare_delta< float_t > rhs)
Definition fp_compare_delta.ipp:75
UHD_INLINE bool operator==(fp_compare_delta< float_t > lhs, fp_compare_delta< float_t > rhs)
Definition fp_compare_delta.ipp:58
UHD_INLINE bool operator<(fp_compare_delta< float_t > lhs, fp_compare_delta< float_t > rhs)
Definition fp_compare_delta.ipp:69
UHD_INLINE bool operator>(fp_compare_delta< float_t > lhs, fp_compare_delta< float_t > rhs)
Definition fp_compare_delta.ipp:80
UHD_INLINE bool operator>=(fp_compare_delta< float_t > lhs, fp_compare_delta< float_t > rhs)
Definition fp_compare_delta.ipp:86
Definition build_info.hpp:12