in MotionMark/resources/extensions.js [410:445]
solveForT: function(x)
{
var t0, t1, t2, x2, d2, i;
for (t2 = x, i = 0; i < 8; ++i) {
x2 = this.sampleX(t2) - x;
if (Math.abs(x2) < this.epsilon)
return t2;
d2 = this.sampleDerivativeX(t2);
if (Math.abs(d2) < this.derivativeEpsilon)
break;
t2 = t2 - x2 / d2;
}
t0 = 0;
t1 = 1;
t2 = x;
if (t2 < t0)
return t0;
if (t2 > t1)
return t1;
while (t0 < t1) {
x2 = this.sampleX(t2);
if (Math.abs(x2 - x) < this.epsilon)
return t2;
if (x > x2)
t0 = t2;
else
t1 = t2;
t2 = (t1 - t0) * .5 + t0;
}
return t2;
}