fslerp = function fslerp(a, b, t) {
if (t === 0.5) return unitLerp(a, b, t, t);
const d = dot(a, b);
if (d < 0) {
const m = unitLerp(a, b, 0.5, 0.5);
return t < 0.5 ? fslerp(a, m, t * 2) : fslerp(m, b, t * 2 - 1);
}
const A = 1.0904 + d * (-3.2452 + d * (3.55645 - d * 1.43519));
const B = 0.848013 + d * (-1.06021 + d * 0.215638);
const K = A * (t - 0.5) * (t - 0.5) + B;
const p = t + t * (t - 0.5) * (t - 1) * K;
return unitLerp(a, b, 1 - p, p);
}