FLOAT athAdjust(FLOAT a, FLOAT x, FLOAT athFloor, float ATHfixpoint) { /* work in progress */ FLOAT const o = 90.30873362f; FLOAT const p = (ATHfixpoint < 1.f) ? 94.82444863f : ATHfixpoint; FLOAT u = FAST_LOG10_X(x, 10.0f); FLOAT const v = a * a; FLOAT w = 0.0f; u -= athFloor; /* undo scaling */ if (v > 1E-20f) w = 1.f + FAST_LOG10_X(v, 10.0f / o); if (w < 0) w = 0.f; u *= w; u += athFloor + o - p; /* redo scaling */ return powf(10.f, 0.1f * u); }
FLOAT athAdjust(FLOAT a, FLOAT x, FLOAT athFloor) { /* work in progress */ FLOAT const o = 90.30873362; FLOAT const p = 94.82444863; FLOAT u = FAST_LOG10_X(x, 10.0); FLOAT const v = a * a; FLOAT w = 0.0; u -= athFloor; /* undo scaling */ if (v > 1E-20) w = 1. + FAST_LOG10_X(v, 10.0 / o); if (w < 0) w = 0.; u *= w; u += athFloor + o - p; /* redo scaling */ return pow(10., 0.1 * u); }