31#ifndef ETL_SCALED_ROUNDING_INCLUDED
32#define ETL_SCALED_ROUNDING_INCLUDED
35#include "static_assert.h"
66 template <u
int32_t Scaling,
typename T>
71 typedef typename scaled_rounding_t<T>::type scale_t;
80 return T((value + scale_t(Scaling - 1U)) / scale_t(Scaling));
84 return T(value / scale_t(Scaling));
93 template <u
int32_t Scaling,
typename T>
98 typedef typename scaled_rounding_t<T>::type scale_t;
108 template <u
int32_t Scaling,
typename T>
113 typedef typename scaled_rounding_t<T>::type scale_t;
121 return T(value / scale_t(Scaling));
125 return T((value - scale_t(Scaling - 1)) / scale_t(Scaling));
134 template <u
int32_t Scaling,
typename T>
139 typedef typename scaled_rounding_t<T>::type scale_t;
150 template <u
int32_t Scaling,
typename T>
155 typedef typename scaled_rounding_t<T>::type scale_t;
165 return T((value + scale_t(Scaling / 2U)) / scale_t(Scaling));
169 return T((value - scale_t(Scaling / 2U)) / scale_t(Scaling));
180 template <u
int32_t Scaling,
typename T>
185 typedef typename scaled_rounding_t<T>::type scale_t;
196 template <u
int32_t Scaling,
typename T>
201 typedef typename scaled_rounding_t<T>::type scale_t;
210 return T((value + scale_t((Scaling - 1) / 2U)) / scale_t(Scaling));
214 return T((value - scale_t((Scaling - 1) / 2U)) / scale_t(Scaling));
224 template <u
int32_t Scaling,
typename T>
229 typedef typename scaled_rounding_t<T>::type scale_t;
239 template <u
int32_t Scaling,
typename T>
244 typedef typename scaled_rounding_t<T>::type scale_t;
252 return T(value / scale_t(Scaling));
261 template <u
int32_t Scaling,
typename T>
266 typedef typename scaled_rounding_t<T>::type scale_t;
276 template <u
int32_t Scaling,
typename T>
296 template <u
int32_t Scaling,
typename T>
301 typedef typename scaled_rounding_t<T>::type scale_t;
312 template <u
int32_t Scaling,
typename T>
317 typedef typename scaled_rounding_t<T>::type scale_t;
326 if ((etl::absolute(value) % scale_t(Scaling)) == scale_t(Scaling / 2U))
329 if ((value / scale_t(Scaling)) & 1U)
351 template <u
int32_t Scaling,
typename T>
356 typedef typename scaled_rounding_t<T>::type scale_t;
367 template <u
int32_t Scaling,
typename T>
372 typedef typename scaled_rounding_t<T>::type scale_t;
381 if ((etl::absolute(value) % scale_t(Scaling)) == scale_t(Scaling / 2U))
384 if ((value / scale_t(Scaling)) & 1U)
406 template <u
int32_t Scaling,
typename T>
411 typedef typename scaled_rounding_t<T>::type scale_t;
conditional
Definition type_traits_generator.h:1223
bitset_ext
Definition absolute.h:39
ETL_NODISCARD ETL_CONSTEXPR14 T round_infinity_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:279
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_odd_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:370
ETL_NODISCARD ETL_CONSTEXPR14 T round_floor_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:137
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_down_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:227
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_down_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:199
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:354
ETL_NODISCARD ETL_CONSTEXPR14 T round_infinity_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:299
ETL_NODISCARD ETL_CONSTEXPR14 T round_floor_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:111
ETL_NODISCARD ETL_CONSTEXPR14 T round_zero_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:242
ETL_NODISCARD ETL_CONSTEXPR14 T round_zero_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:264
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_up_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:153
ETL_NODISCARD ETL_CONSTEXPR14 T round_ceiling_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:96
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_up_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:183
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:315
ETL_NODISCARD ETL_CONSTEXPR14 T round_ceiling_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:69
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_odd_scaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:409
Definition scaled_rounding.h:43