31#ifndef ETL_SCALED_ROUNDING_INCLUDED
32#define ETL_SCALED_ROUNDING_INCLUDED
43 typedef typename etl::conditional<etl::is_signed<T>::value, int32_t, uint32_t>::type type;
65 template <u
int32_t Scaling,
typename T>
68 typedef typename scaled_rounding_t<T>::type scale_t;
77 return T((value + scale_t(Scaling - 1U)) / scale_t(Scaling));
81 return T(value / scale_t(Scaling));
90 template <u
int32_t Scaling,
typename T>
93 typedef typename scaled_rounding_t<T>::type scale_t;
103 template <u
int32_t Scaling,
typename T>
106 typedef typename scaled_rounding_t<T>::type scale_t;
114 return T(value / scale_t(Scaling));
118 return T((value - scale_t(Scaling - 1)) / scale_t(Scaling));
127 template <u
int32_t Scaling,
typename T>
130 typedef typename scaled_rounding_t<T>::type scale_t;
141 template <u
int32_t Scaling,
typename T>
144 typedef typename scaled_rounding_t<T>::type scale_t;
154 return T((value + scale_t(Scaling / 2U)) / scale_t(Scaling));
158 return T((value - scale_t(Scaling / 2U)) / scale_t(Scaling));
169 template <u
int32_t Scaling,
typename T>
172 typedef typename scaled_rounding_t<T>::type scale_t;
183 template <u
int32_t Scaling,
typename T>
186 typedef typename scaled_rounding_t<T>::type scale_t;
195 return T((value + scale_t((Scaling - 1) / 2U)) / scale_t(Scaling));
199 return T((value - scale_t((Scaling - 1) / 2U)) / scale_t(Scaling));
209 template <u
int32_t Scaling,
typename T>
212 typedef typename scaled_rounding_t<T>::type scale_t;
222 template <u
int32_t Scaling,
typename T>
225 typedef typename scaled_rounding_t<T>::type scale_t;
233 return T(value / scale_t(Scaling));
242 template <u
int32_t Scaling,
typename T>
245 typedef typename scaled_rounding_t<T>::type scale_t;
255 template <u
int32_t Scaling,
typename T>
273 template <u
int32_t Scaling,
typename T>
276 typedef typename scaled_rounding_t<T>::type scale_t;
287 template <u
int32_t Scaling,
typename T>
290 typedef typename scaled_rounding_t<T>::type scale_t;
299 if ((etl::absolute(value) % scale_t(Scaling)) == scale_t(Scaling / 2U))
302 if (
static_cast<unsigned int>(value / scale_t(Scaling)) & 1U)
324 template <u
int32_t Scaling,
typename T>
327 typedef typename scaled_rounding_t<T>::type scale_t;
338 template <u
int32_t Scaling,
typename T>
341 typedef typename scaled_rounding_t<T>::type scale_t;
350 if ((etl::absolute(value) % scale_t(Scaling)) == scale_t(Scaling / 2U))
353 if (
static_cast<unsigned int>(value / scale_t(Scaling)) & 1U)
375 template <u
int32_t Scaling,
typename T>
378 typedef typename scaled_rounding_t<T>::type scale_t;
ETL_NODISCARD ETL_CONSTEXPR14 T round_infinity_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:256
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_odd_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:339
ETL_NODISCARD ETL_CONSTEXPR14 T round_floor_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:128
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_down_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:210
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_down_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:184
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:325
ETL_NODISCARD ETL_CONSTEXPR14 T round_infinity_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:274
ETL_NODISCARD ETL_CONSTEXPR14 T round_floor_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:104
ETL_NODISCARD ETL_CONSTEXPR14 T round_zero_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:223
ETL_NODISCARD ETL_CONSTEXPR14 T round_zero_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:243
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_up_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:142
ETL_NODISCARD ETL_CONSTEXPR14 T round_ceiling_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:91
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_up_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:170
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:288
ETL_NODISCARD ETL_CONSTEXPR14 T round_ceiling_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:66
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_odd_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:376
Definition scaled_rounding.h:42