31#ifndef ETL_SCALED_ROUNDING_INCLUDED
32#define ETL_SCALED_ROUNDING_INCLUDED
36#include "static_assert.h"
44 typedef typename etl::conditional<etl::is_signed<T>::value, int32_t, uint32_t>::type type;
66 template <u
int32_t Scaling,
typename T>
69 typedef typename scaled_rounding_t<T>::type scale_t;
78 return T((value + scale_t(Scaling - 1U)) / scale_t(Scaling));
82 return T(value / scale_t(Scaling));
91 template <u
int32_t Scaling,
typename T>
94 typedef typename scaled_rounding_t<T>::type scale_t;
104 template <u
int32_t Scaling,
typename T>
107 typedef typename scaled_rounding_t<T>::type scale_t;
115 return T(value / scale_t(Scaling));
119 return T((value - scale_t(Scaling - 1)) / scale_t(Scaling));
128 template <u
int32_t Scaling,
typename T>
131 typedef typename scaled_rounding_t<T>::type scale_t;
142 template <u
int32_t Scaling,
typename T>
145 typedef typename scaled_rounding_t<T>::type scale_t;
155 return T((value + scale_t(Scaling / 2U)) / scale_t(Scaling));
159 return T((value - scale_t(Scaling / 2U)) / scale_t(Scaling));
170 template <u
int32_t Scaling,
typename T>
173 typedef typename scaled_rounding_t<T>::type scale_t;
184 template <u
int32_t Scaling,
typename T>
187 typedef typename scaled_rounding_t<T>::type scale_t;
196 return T((value + scale_t((Scaling - 1) / 2U)) / scale_t(Scaling));
200 return T((value - scale_t((Scaling - 1) / 2U)) / scale_t(Scaling));
210 template <u
int32_t Scaling,
typename T>
213 typedef typename scaled_rounding_t<T>::type scale_t;
223 template <u
int32_t Scaling,
typename T>
226 typedef typename scaled_rounding_t<T>::type scale_t;
234 return T(value / scale_t(Scaling));
243 template <u
int32_t Scaling,
typename T>
246 typedef typename scaled_rounding_t<T>::type scale_t;
256 template <u
int32_t Scaling,
typename T>
274 template <u
int32_t Scaling,
typename T>
277 typedef typename scaled_rounding_t<T>::type scale_t;
288 template <u
int32_t Scaling,
typename T>
291 typedef typename scaled_rounding_t<T>::type scale_t;
300 if ((etl::absolute(value) % scale_t(Scaling)) == scale_t(Scaling / 2U))
303 if (
static_cast<unsigned int>(value / scale_t(Scaling)) & 1U)
325 template <u
int32_t Scaling,
typename T>
328 typedef typename scaled_rounding_t<T>::type scale_t;
339 template <u
int32_t Scaling,
typename T>
342 typedef typename scaled_rounding_t<T>::type scale_t;
351 if ((etl::absolute(value) % scale_t(Scaling)) == scale_t(Scaling / 2U))
354 if (
static_cast<unsigned int>(value / scale_t(Scaling)) & 1U)
376 template <u
int32_t Scaling,
typename T>
379 typedef typename scaled_rounding_t<T>::type scale_t;
bitset_ext
Definition absolute.h:40
ETL_NODISCARD ETL_CONSTEXPR14 T round_infinity_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:257
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_odd_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:340
ETL_NODISCARD ETL_CONSTEXPR14 T round_floor_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:129
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_down_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:211
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_down_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:185
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:326
ETL_NODISCARD ETL_CONSTEXPR14 T round_infinity_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:275
ETL_NODISCARD ETL_CONSTEXPR14 T round_floor_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:105
ETL_NODISCARD ETL_CONSTEXPR14 T round_zero_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:224
ETL_NODISCARD ETL_CONSTEXPR14 T round_zero_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:244
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_up_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:143
ETL_NODISCARD ETL_CONSTEXPR14 T round_ceiling_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:92
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_up_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:171
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:289
ETL_NODISCARD ETL_CONSTEXPR14 T round_ceiling_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:67
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_odd_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:377
Definition scaled_rounding.h:43