i don't know if you fixed this alredy but i finaly managed to remember to check this whan i was home and able to
..
The problem is as others have pointed out this row:
y += force - offset;
The reason is that your MAX_FORCE constant is not time based .. meaning that when your force reaches MAX_FORCE it will be frame rate depandant and not frame time depandant as you whant it to be
so heres a solution:
//change it to a static const to keep c++ typesafety
static const float MAX_FORCE = 205.f;
...
//gravity should realy be a constant :)
const float gravity = 31.4f;
...
//and here we make sure it is kept time based
y += (force - offset) * frameRate;
now this should work fine