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

◆ log_natural_()

template<typename F>
F fl::detail::log_natural_ ( F value)
inline

Definition at line 295 of file math.cpp.hpp.

295 {
296 if (value <= F(0)) return F(-1e30); // -inf surrogate
297 int e = 0;
298 while (value >= F(2)) { value *= F(0.5); ++e; }
299 while (value < F(1)) { value *= F(2); --e; }
300 // value ∈ [1, 2); evaluate log(value) via Taylor around 1: let u = value - 1.
301 // log(1+u) = u - u²/2 + u³/3 - u⁴/4 + ...
302 // Use enough terms for ~5-decimal accuracy on [0, 1].
303 const F u = value - F(1);
304 const F u2 = u * u;
305 const F u3 = u2 * u;
306 const F u4 = u2 * u2;
307 const F u5 = u4 * u;
308 const F u6 = u4 * u2;
309 const F u7 = u6 * u;
310 F log_m = u - u2 * F(0.5) + u3 * F(1.0 / 3.0) - u4 * F(0.25)
311 + u5 * F(0.2) - u6 * F(1.0 / 6.0) + u7 * F(1.0 / 7.0);
312 const F kLn2 = F(0.69314718055994530942);
313 return log_m + F(e) * kLn2;
314}
constexpr int type_rank< T >::value

References fl::FL_NO_EXCEPT, and fl::type_rank< T >::value.

Referenced by fl::log10_impl_double(), fl::log10_impl_float(), fl::log_impl_double(), fl::log_impl_float(), fl::pow_impl_double(), and fl::pow_impl_float().

+ Here is the caller graph for this function: