OpenKalman
fixed-constants.hpp
Go to the documentation of this file.
1 /* This file is part of OpenKalman, a header-only C++ library for
2  * Kalman filters and other recursive filters.
3  *
4  * Copyright (c) 2025 Christopher Lee Ogden <ogden@gatech.edu>
5  *
6  * This Source Code Form is subject to the terms of the Mozilla Public
7  * License, v. 2.0. If a copy of the MPL was not distributed with this
8  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
9  */
10 
17 #ifndef OPENKALMAN_VALUE_CLASSES_FIXED_CONSTANTS_HPP
18 #define OPENKALMAN_VALUE_CLASSES_FIXED_CONSTANTS_HPP
19 
21 #include "values/classes/Fixed.hpp"
22 
23 namespace OpenKalman::values
24 {
28 #if __cpp_nontype_template_args >= 201911L
29  template<values::number T>
30  using fixed_pi = values::Fixed<T, numbers::pi_v<T>>;
31 #else
32  template<typename T>
33  struct fixed_pi
34  {
35  static_assert(values::number<T>);
36  using value_type = T;
37  static constexpr value_type value {numbers::pi_v<value_type>};
38  using type = fixed_pi;
39  constexpr operator value_type() const { return value; }
40  constexpr value_type operator()() const { return value; }
41  };
42 #endif
43 
44 
48 #if __cpp_nontype_template_args >= 201911L
49  template<values::number T>
50  using fixed_minus_pi = values::Fixed<T, -numbers::pi_v<T>>;
51 #else
52  template<typename T>
54  {
55  static_assert(values::number<T>);
56  using value_type = T;
57  static constexpr value_type value {-numbers::pi_v<value_type>};
58  using type = fixed_minus_pi;
59  constexpr operator value_type() const { return value; }
60  constexpr value_type operator()() const { return value; }
61  };
62 #endif
63 
64 
68 #if __cpp_nontype_template_args >= 201911L
69  template<values::number T>
71 #else
72  template<typename T>
73  struct fixed_2pi
74  {
75  static_assert(values::number<T>);
76  using value_type = T;
77  static constexpr value_type value {2 * numbers::pi_v<value_type>};
78  using type = fixed_2pi;
79  constexpr operator value_type() const { return value; }
80  constexpr value_type operator()() const { return value; }
81  };
82 #endif
83 
84 
88 #if __cpp_nontype_template_args >= 201911L
89  template<values::number T>
90  using fixed_half_pi = values::Fixed<T, static_cast<T>(0.5) * numbers::pi_v<T>>;
91 #else
92  template<typename T>
94  {
95  static_assert(values::number<T>);
96  using value_type = T;
97  static constexpr value_type value {static_cast<value_type>(0.5) * numbers::pi_v<value_type>};
98  using type = fixed_half_pi;
99  constexpr operator value_type() const { return value; }
100  constexpr value_type operator()() const { return value; }
101  };
102 #endif
103 
104 
108 #if __cpp_nontype_template_args >= 201911L
109  template<values::number T>
110  using fixed_minus_half_pi = values::Fixed<T, static_cast<T>(-0.5) * numbers::pi_v<T>>;
111 #else
112  template<typename T>
114  {
115  static_assert(values::number<T>);
116  using value_type = T;
117  static constexpr value_type value {static_cast<value_type>(-0.5) * numbers::pi_v<value_type>};
118  using type = fixed_minus_half_pi;
119  constexpr operator value_type() const { return value; }
120  constexpr value_type operator()() const { return value; }
121  };
122 #endif
123 
124 
125 } // namespace OpenKalman::values
126 
127 
128 #endif //OPENKALMAN_VALUE_CLASSES_FIXED_CONSTANTS_HPP
A fixed version of pi.
Definition: fixed-constants.hpp:33
A fixed version of 2*pi.
Definition: fixed-constants.hpp:73
A fixed version of -pi.
Definition: fixed-constants.hpp:53
constexpr bool value
T is numerical value or is reducible to a numerical value.
Definition: value.hpp:31
A fixed version of pi/2.
Definition: fixed-constants.hpp:93
A fixed version of -pi/2.
Definition: fixed-constants.hpp:113
Definition for values::abs.
Definition: constant_coefficient.hpp:25
Definition: Fixed.hpp:36
Definition for values::number.