WPILibC++ 2024.3.2
is_inf.hpp
Go to the documentation of this file.
1/*################################################################################
2 ##
3 ## Copyright (C) 2016-2023 Keith O'Hara
4 ##
5 ## This file is part of the GCE-Math C++ library.
6 ##
7 ## Licensed under the Apache License, Version 2.0 (the "License");
8 ## you may not use this file except in compliance with the License.
9 ## You may obtain a copy of the License at
10 ##
11 ## http://www.apache.org/licenses/LICENSE-2.0
12 ##
13 ## Unless required by applicable law or agreed to in writing, software
14 ## distributed under the License is distributed on an "AS IS" BASIS,
15 ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 ## See the License for the specific language governing permissions and
17 ## limitations under the License.
18 ##
19 ################################################################################*/
20
21/*
22 * compile-time check if a float is +/-Inf
23 */
24
25#ifndef _gcem_is_inf_HPP
26#define _gcem_is_inf_HPP
27
28namespace gcem
29{
30
31namespace internal
32{
33
34template<typename T>
35constexpr
36bool
37is_neginf(const T x)
38noexcept
39{
40 return x == - GCLIM<T>::infinity();
41}
42
43template<typename T1, typename T2>
44constexpr
45bool
46any_neginf(const T1 x, const T2 y)
47noexcept
48{
49 return( is_neginf(x) || is_neginf(y) );
50}
51
52template<typename T1, typename T2>
53constexpr
54bool
55all_neginf(const T1 x, const T2 y)
56noexcept
57{
58 return( is_neginf(x) && is_neginf(y) );
59}
60
61template<typename T1, typename T2, typename T3>
62constexpr
63bool
64any_neginf(const T1 x, const T2 y, const T3 z)
65noexcept
66{
67 return( is_neginf(x) || is_neginf(y) || is_neginf(z) );
68}
69
70template<typename T1, typename T2, typename T3>
71constexpr
72bool
73all_neginf(const T1 x, const T2 y, const T3 z)
74noexcept
75{
76 return( is_neginf(x) && is_neginf(y) && is_neginf(z) );
77}
78
79//
80
81template<typename T>
82constexpr
83bool
84is_posinf(const T x)
85noexcept
86{
87 return x == GCLIM<T>::infinity();
88}
89
90template<typename T1, typename T2>
91constexpr
92bool
93any_posinf(const T1 x, const T2 y)
94noexcept
95{
96 return( is_posinf(x) || is_posinf(y) );
97}
98
99template<typename T1, typename T2>
100constexpr
101bool
102all_posinf(const T1 x, const T2 y)
103noexcept
104{
105 return( is_posinf(x) && is_posinf(y) );
106}
107
108template<typename T1, typename T2, typename T3>
109constexpr
110bool
111any_posinf(const T1 x, const T2 y, const T3 z)
112noexcept
113{
114 return( is_posinf(x) || is_posinf(y) || is_posinf(z) );
115}
116
117template<typename T1, typename T2, typename T3>
118constexpr
119bool
120all_posinf(const T1 x, const T2 y, const T3 z)
121noexcept
122{
123 return( is_posinf(x) && is_posinf(y) && is_posinf(z) );
124}
125
126//
127
128template<typename T>
129constexpr
130bool
131is_inf(const T x)
132noexcept
133{
134 return( is_neginf(x) || is_posinf(x) );
135}
136
137template<typename T1, typename T2>
138constexpr
139bool
140any_inf(const T1 x, const T2 y)
141noexcept
142{
143 return( is_inf(x) || is_inf(y) );
144}
145
146template<typename T1, typename T2>
147constexpr
148bool
149all_inf(const T1 x, const T2 y)
150noexcept
151{
152 return( is_inf(x) && is_inf(y) );
153}
154
155template<typename T1, typename T2, typename T3>
156constexpr
157bool
158any_inf(const T1 x, const T2 y, const T3 z)
159noexcept
160{
161 return( is_inf(x) || is_inf(y) || is_inf(z) );
162}
163
164template<typename T1, typename T2, typename T3>
165constexpr
166bool
167all_inf(const T1 x, const T2 y, const T3 z)
168noexcept
169{
170 return( is_inf(x) && is_inf(y) && is_inf(z) );
171}
172
173}
174
175}
176
177#endif
constexpr bool is_inf(const T x) noexcept
Definition: is_inf.hpp:131
constexpr bool all_inf(const T1 x, const T2 y) noexcept
Definition: is_inf.hpp:149
constexpr bool any_posinf(const T1 x, const T2 y) noexcept
Definition: is_inf.hpp:93
constexpr bool is_posinf(const T x) noexcept
Definition: is_inf.hpp:84
constexpr bool is_neginf(const T x) noexcept
Definition: is_inf.hpp:37
constexpr bool all_neginf(const T1 x, const T2 y) noexcept
Definition: is_inf.hpp:55
constexpr bool all_posinf(const T1 x, const T2 y) noexcept
Definition: is_inf.hpp:102
constexpr bool any_inf(const T1 x, const T2 y) noexcept
Definition: is_inf.hpp:140
constexpr bool any_neginf(const T1 x, const T2 y) noexcept
Definition: is_inf.hpp:46
Definition: is_even.hpp:29
std::numeric_limits< T > GCLIM
Definition: gcem_options.hpp:74