31#ifndef ETL_SCALED_ROUNDING_INCLUDED
32#define ETL_SCALED_ROUNDING_INCLUDED
34#include "static_assert.h"
66 template <u
int32_t SCALING,
typename T>
74 return T((value + scale_t(SCALING)) / scale_t(SCALING));
78 return T(value / scale_t(SCALING));
87 template <u
int32_t SCALING,
typename T>
100 template <u
int32_t SCALING,
typename T>
108 return T(value / scale_t(SCALING));
112 return T((value - scale_t(SCALING)) / scale_t(SCALING));
121 template <u
int32_t SCALING,
typename T>
135 template <u
int32_t SCALING,
typename T>
139 ETL_STATIC_ASSERT((((SCALING / 2U) * 2U) == SCALING),
"Scaling must be divisible by 2");
144 return T((value + scale_t(SCALING / 2U)) / scale_t(SCALING));
148 return T((value - scale_t(SCALING / 2U)) / scale_t(SCALING));
158 template <u
int32_t SCALING,
typename T>
172 template <u
int32_t SCALING,
typename T>
176 ETL_STATIC_ASSERT((((SCALING / 2U) * 2U) == SCALING),
"Scaling must be divisible by 2");
181 return T((value + scale_t((SCALING / 2U) - 1U)) / scale_t(SCALING));
185 return T((value - scale_t((SCALING / 2U) - 1U)) / scale_t(SCALING));
195 template <u
int32_t SCALING,
typename T>
208 template <u
int32_t SCALING,
typename T>
214 return T(value / scale_t(SCALING));
222 template <u
int32_t SCALING,
typename T>
235 template <u
int32_t SCALING,
typename T>
243 return T((value + scale_t(SCALING)) / scale_t(SCALING));
247 return T((value - scale_t(SCALING)) / scale_t(SCALING));
256 template <u
int32_t SCALING,
typename T>
270 template <u
int32_t SCALING,
typename T>
277 if ((etl::absolute(value) % scale_t(SCALING)) == scale_t(SCALING / 2U))
280 if ((value / scale_t(SCALING)) & 1U)
301 template <u
int32_t SCALING,
typename T>
315 template <u
int32_t SCALING,
typename T>
322 if ((etl::absolute(value) % scale_t(SCALING)) == scale_t(SCALING / 2U))
325 if ((value / scale_t(SCALING)) & 1U)
346 template <u
int32_t SCALING,
typename T>
is_integral
Definition type_traits_generator.h:1001
bitset_ext
Definition absolute.h:38
T round_half_even_unscaled(T value)
Definition scaled_rounding.h:271
T round_ceiling_scaled(T value)
Definition scaled_rounding.h:88
T round_infinity_unscaled(T value)
Definition scaled_rounding.h:236
T round_half_down_scaled(T value)
Definition scaled_rounding.h:196
T round_half_even_scaled(T value)
Definition scaled_rounding.h:302
T round_half_odd_scaled(T value)
Definition scaled_rounding.h:347
T round_half_up_scaled(T value)
Definition scaled_rounding.h:159
T round_infinity_scaled(T value)
Definition scaled_rounding.h:257
T round_floor_scaled(T value)
Definition scaled_rounding.h:122
T round_zero_unscaled(T value)
Definition scaled_rounding.h:209
T round_ceiling_unscaled(T value)
Definition scaled_rounding.h:67
T round_half_up_unscaled(T value)
Definition scaled_rounding.h:136
T round_floor_unscaled(T value)
Definition scaled_rounding.h:101
T round_half_odd_unscaled(T value)
Definition scaled_rounding.h:316
T round_zero_scaled(T value)
Definition scaled_rounding.h:223
T round_half_down_unscaled(T value)
Definition scaled_rounding.h:173
pair holds two objects of arbitrary type
Definition utility.h:164
Definition scaled_rounding.h:42