FastLED 3.10.6
Loading...
Searching...
No Matches

◆ sin32()

FASTLED_FORCE_INLINE i32 fl::sin32 ( u32 angle)

Definition at line 57 of file sin32.h.

57 {
58 u8 angle256 = static_cast<u8>(angle >> 16); // 0..255
59 u32 t = angle & 0xFFFF; // 0..65535
60
61 u8 quadrant = angle256 >> 6; // 0..3
62 u8 pos = angle256 & 0x3F; // 0..63
63
64 // Branchless quarter-wave mapping
65 u8 mirror = quadrant & 1;
66 u8 qi = static_cast<u8>(pos + mirror * (64 - 2 * pos));
67 u8 qi_next = static_cast<u8>(qi + 1 - 2 * mirror);
68
69 i32 dmask = -static_cast<i32>(mirror);
70 i32 raw = sin32_interp(qi, qi_next, dmask, t);
71
72 // Branchless sign: negative in quadrants 2, 3
73 i32 vmask = -static_cast<i32>((quadrant >> 1) & 1);
74 return (i32)(((i64)raw ^ vmask) - vmask);
75}
uint8_t pos
Definition Blur.ino:11
unsigned char u8
Definition stdint.h:131
FASTLED_FORCE_INLINE i32 sin32_interp(u8 qi, u8 qi_next, i32 dmask, u32 t, u8 offset=0) FL_NO_EXCEPT
Definition sin32.h:38
fl::i64 i64
Definition stdint.h:221

References FASTLED_FORCE_INLINE, FL_NO_EXCEPT, pos, sin32_interp(), and t.

Referenced by cos32(), easeOutSine16(), fl::fixed_point_base< Derived, IntBits, FracBits >::sin(), fl::s12x4::sin(), fl::s16x16::sin(), fl::s24x8::sin(), fl::s4x12::sin(), fl::s8x24::sin(), fl::s8x8::sin(), sin16lut(), fl::s12x4::sincos(), fl::s24x8::sincos(), fl::s4x12::sincos(), fl::s8x24::sincos(), and fl::s8x8::sincos().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: