cMHN 1.2
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
round.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_VALUE_FUNCTIONS_ROUND_H
4#define pRC_CORE_VALUE_FUNCTIONS_ROUND_H
5
6#include <cmath>
7
12
13namespace pRC
14{
15 template<Size D = 0, Position P = Position::Right, IsFloat T>
16 requires(P == Position::Right) || (P == Position::Left)
17 static inline constexpr auto round(T const &a)
18 {
19 constexpr T scale = iPow(Size(10), D);
20 if constexpr(P == Position::Right)
21 {
22 return Float(std::round((a * scale)())) / scale;
23 }
24 if constexpr(P == Position::Left)
25 {
26 return Float(std::round((a / scale)())) * scale;
27 }
28 }
29
30 template<Size D = 0, Position P = Position::Right, IsInteger T>
31 requires(P == Position::Right) || (P == Position::Left)
32 static inline constexpr auto round(T const &a)
33 {
34 if constexpr(P == Position::Right)
35 {
36 return a;
37 }
38 if constexpr(P == Position::Left)
39 {
40 return cast<T>(round<D, P>(cast<Float<>>(a)));
41 }
42 }
43}
44#endif // pRC_CORE_VALUE_FUNCTIONS_ROUND_H
pRC::Size const D
Definition CalculatePThetaTests.cpp:9
Definition value.hpp:12
Definition cholesky.hpp:10
Float(Float< 16 >::Fundamental const) -> Float< 16 >
static constexpr auto cast(T const &a)
Definition cast.hpp:11
std::size_t Size
Definition basics.hpp:31
static constexpr auto round(T const &a)
Definition round.hpp:11
static constexpr B iPow(B const base, N const exp)
Definition ipow.hpp:11