33 template <
typename IntT, detail::enable_if_
integer_t<IntT> = 0>
38 template <
typename OtherFP>
39 constexpr u4x12(
const OtherFP& other,
71 (
static_cast<u32
>(
mValue) * (
static_cast<u32
>(1) <<
FRAC_BITS)) / b.mValue));
112 return from_raw(a.mValue % b.mValue);
134 return a < b ? a : b;
138 return a > b ? a : b;
142 return a + (b - a) *
t;
146 return x < lo ? lo : (
x > hi ? hi :
x);
154 constexpr u4x12 zero(0.0f);
155 constexpr u4x12 one(1.0f);
156 constexpr u4x12 two(2.0f);
157 constexpr u4x12 three(3.0f);
158 u4x12 t =
clamp((
x - edge0) / (edge1 - edge0), zero, one);
159 return t *
t * (three - two *
t);
174 if (base.mValue == 0)
return u4x12();
175 constexpr u4x12 one(1.0f);
176 if (
exp.mValue == 0)
return one;
177 if (base == one)
return one;
180 constexpr u16 kOneRaw =
static_cast<u16
>(
SCALE);
181 if (base.mValue >=
static_cast<u16
>(kOneRaw - 2) &&
182 base.mValue <= kOneRaw) {
201 : (v & 0x00000002u) ? r + 1
210 u32 val =
static_cast<u32
>(
x.mValue);
215 t =
static_cast<i32
>(
218 t =
static_cast<i32
>(
223 constexpr int IFRAC = 20;
224 constexpr i32 c0 = 1512456;
225 constexpr i32 c1 = -733024;
226 constexpr i32 c2 = 381136;
227 constexpr i32 c3 = -111776;
229 i32 t20 =
static_cast<i32
>(
t) << (IFRAC -
FRAC_BITS);
232 acc = c2 +
static_cast<i32
>((
static_cast<i64>(acc) * t20) >> IFRAC);
233 acc = c1 +
static_cast<i32
>((
static_cast<i64>(acc) * t20) >> IFRAC);
234 acc = c0 +
static_cast<i32
>((
static_cast<i64>(acc) * t20) >> IFRAC);
235 i32 frac_part =
static_cast<i32
>((
static_cast<i64>(acc) * t20) >> IFRAC);
237 u16 frac12 =
static_cast<u16
>(frac_part >> (IFRAC -
FRAC_BITS));
238 return from_raw(
static_cast<u16
>((
static_cast<i32
>(
static_cast<u32
>(int_part) <<
FRAC_BITS)) + frac12));
249 if (n < 0)
return u4x12();
250 u32 int_pow =
static_cast<u32
>(
SCALE) << n;
253 constexpr int IFRAC = 20;
254 constexpr i32 d0 = 726836;
255 constexpr i32 d1 = 252400;
256 constexpr i32 d2 = 55952;
257 constexpr i32 d3 = 13376;
262 acc = d2 +
static_cast<i32
>((
static_cast<i64>(acc) * fr20) >> IFRAC);
263 acc = d1 +
static_cast<i32
>((
static_cast<i64>(acc) * fr20) >> IFRAC);
264 acc = d0 +
static_cast<i32
>((
static_cast<i64>(acc) * fr20) >> IFRAC);
265 constexpr i32 one20 =
static_cast<i32
>(1) << IFRAC;
266 i32 frac_pow20 = one20 +
static_cast<i32
>((
static_cast<i64>(acc) * fr20) >> IFRAC);
268 u32 frac_pow12 =
static_cast<u32
>(frac_pow20) >> (IFRAC -
FRAC_BITS);
static constexpr int INT_BITS
constexpr bool operator!=(u4x12 b) const FL_NOEXCEPT
static constexpr i32 SCALE
static constexpr FASTLED_FORCE_INLINE u4x12 lerp(u4x12 a, u4x12 b, u4x12 t) FL_NOEXCEPT
constexpr float to_float() const FL_NOEXCEPT
constexpr bool operator<(u4x12 b) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u4x12 fract(u4x12 x) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u4x12 clamp(u4x12 x, u4x12 lo, u4x12 hi) FL_NOEXCEPT
static constexpr int _highest_bit_step(u32 v, int r) FL_NOEXCEPT
friend constexpr u4x12 operator*(u16 scalar, u4x12 fp) FL_NOEXCEPT
static FASTLED_FORCE_INLINE u4x12 exp2_fp(u4x12 x) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u4x12 operator>>(int shift) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u4x12 max(u4x12 a, u4x12 b) FL_NOEXCEPT
static constexpr int FRAC_BITS
constexpr FASTLED_FORCE_INLINE u4x12 operator+(u4x12 b) const FL_NOEXCEPT
static FASTLED_FORCE_INLINE u4x12 pow(u4x12 base, u4x12 exp) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u4x12 operator*(u16 scalar) const FL_NOEXCEPT
constexpr bool operator>=(u4x12 b) const FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u4x12 operator/(u4x12 b) const FL_NOEXCEPT
constexpr u4x12(IntT n) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE int highest_bit(u32 v) FL_NOEXCEPT
constexpr u16 raw() const FL_NOEXCEPT
static FASTLED_FORCE_INLINE u4x12 smoothstep(u4x12 edge0, u4x12 edge1, u4x12 x) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u4x12 step(u4x12 edge, u4x12 x) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u4x12 from_raw(u16 raw) FL_NOEXCEPT
constexpr bool operator>(u4x12 b) const FL_NOEXCEPT
static FASTLED_FORCE_INLINE u4x12 log2_fp(u4x12 x) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u4x12 operator*(u4x12 b) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u4x12 floor(u4x12 x) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u4x12 mod(u4x12 a, u4x12 b) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u4x12 operator-(u4x12 b) const FL_NOEXCEPT
constexpr u4x12() FL_NOEXCEPT=default
static constexpr FASTLED_FORCE_INLINE u4x12 rsqrt(u4x12 x) FL_NOEXCEPT
constexpr u16 to_int() const FL_NOEXCEPT
constexpr u4x12(const OtherFP &other, typename fl::enable_if<(OtherFP::INT_BITS<=INT_BITS) &&(OtherFP::FRAC_BITS<=FRAC_BITS) &&(OtherFP::INT_BITS !=INT_BITS||OtherFP::FRAC_BITS !=FRAC_BITS), int >::type=0) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u4x12 abs(u4x12 x) FL_NOEXCEPT
constexpr bool operator<=(u4x12 b) const FL_NOEXCEPT
constexpr bool operator==(u4x12 b) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u4x12 sqrt(u4x12 x) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u4x12 operator<<(int shift) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u4x12 min(u4x12 a, u4x12 b) FL_NOEXCEPT
constexpr u4x12(u16 raw, RawTag) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u4x12 ceil(u4x12 x) FL_NOEXCEPT
#define constexpr
Declares that it is possible to evaluate a value at compile time, introduced in C++11.
expected< T, E > result
Alias for expected (Rust-style naming)
enable_if< is_fixed_point< T >::value, T >::type exp(T x) FL_NOEXCEPT
FL_OPTIMIZE_FUNCTION constexpr u16 isqrt32(u32 x) FL_NOEXCEPT
Base definition for an LED controller.
#define FL_OPTIMIZATION_LEVEL_O3_BEGIN
#define FASTLED_FORCE_INLINE
#define FL_OPTIMIZATION_LEVEL_O3_END