350 {
351 if (
x == 0)
return 0.0f;
352
353
354 int msb = 0;
355 {
357 if (v >= 0x10000u) { v >>= 16; msb += 16; }
358 if (v >= 0x100u) { v >>= 8; msb += 8; }
359 if (v >= 0x10u) { v >>= 4; msb += 4; }
360 if (v >= 0x4u) { v >>= 2; msb += 2; }
361 if (v >= 0x2u) { msb += 1; }
362 }
363
364
365 u32 t_raw;
366 if (msb >= 16) {
367 t_raw = (
x >> (msb - 16)) - 65536u;
368 } else {
369 t_raw = (
x << (16 - msb)) - 65536u;
370 }
372
373
374
375 static constexpr u16x16 one(1.0f);
377 u16x16 complement = one -
t;
378 u16x16 prod =
t * complement;
379 u16x16 correction = prod * kCorrection;
380 u16x16 frac =
t + correction;
381
382
384 (static_cast<u32>(msb) << 16) + frac.raw());
385
386
387#if FASTLED_FFT_PRECISION == FASTLED_FFT_FIXED16
388
390 u16x16 db = log2_val * kDbScale;
391 return db.to_float();
392#else
393 return 6.02060f * log2_val.to_float();
394#endif
395 }
static constexpr FASTLED_FORCE_INLINE u16x16 from_raw(u32 raw) FL_NOEXCEPT