mattdesl/eases

expoOut glitch

Opened this issue · 2 comments

The expoOut function is meant to serve as an ease to gradually go from 0 to 1. I noted a glitch. When going from 0.0 to 1.0 in steps of 0.01, the last few values are as follows:

input: output:

0.96 0.9987114180558858
0.97 0.9987977105338428
0.98 0.9988782242626982
0.99 0.9989533462279919
1 1 
Diff from 0.98 to 0.99: 0.00007512196529368964
Diff from 0.99 to 1.00:  0.001046653772008077

As you can see, the diff 0.99 to 1.00 is substantually bigger than the diff from 0.98 to 0.99. In animations, this causes excactly what you try to prevent!

Looking at the code:

function expoOut(t) {
  return t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t)
}

Returning 1.0 when t === 1.0 is WRONG in my opinion.

Agree?

Good catch — care to submit a PR with a working function? I am considering using a major verison bump for this, not sure...

jrus commented

Is this some standard thing? Is there an external definition? The discontinuity in the “expo” functions is very weird, but many of these easing functions seem just made up, so of course you can do whatever you like with them.