From 62c76c2c170ae5ff6b9130fe1a2728f1a2cb527b Mon Sep 17 00:00:00 2001 From: narno2202 <130909513+narno2202@users.noreply.github.com> Date: Sun, 18 Jan 2026 15:16:47 +0100 Subject: [PATCH] Minor fast_sin optimization --- Marlin/src/feature/resonance/resonance_generator.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Marlin/src/feature/resonance/resonance_generator.cpp b/Marlin/src/feature/resonance/resonance_generator.cpp index ca085b2b51..b399aaa24a 100644 --- a/Marlin/src/feature/resonance/resonance_generator.cpp +++ b/Marlin/src/feature/resonance/resonance_generator.cpp @@ -80,11 +80,10 @@ void ResonanceGenerator::reset() { // Fast sine approximation float ResonanceGenerator::fast_sin(float x) { - static constexpr float INV_TAU = (1.0f / M_TAU); // Reduce the angle to [-π, π] - const float y = x * INV_TAU; // Multiples of 2π - int k = static_cast(y); // Truncates toward zero + const float y = x * (1.0f / M_TAU); // Multiples of 2π + int k = static_cast(y); // Truncates toward zero // Negative? The truncation is one too high. if (y < 0.0f) --k; // Correct for negatives @@ -95,8 +94,11 @@ float ResonanceGenerator::fast_sin(float x) { else if (r < -M_PI) r += M_TAU; - // Cheap polynomial approximation of sin(r) - return r * (1.27323954f - 0.405284735f * ABS(r)); + // Optimized polynomial approximation + // Using sin(x) ≈ x(1 - (x²/π²) * 0.785398163) where 0.785398163 ≈ 1/π + const float r2 = r * r; + + return r * (1.0f - 0.101321184f * r2); } void ResonanceGenerator::fill_stepper_plan_buffer() {