Another approach:
Store the original position, and increment x based on delta time.
float timeNeeded = 3.0f; float increment = deltaTime / timeNeeded; x += increment; x = clamp(x, 0.0f, 1.0f); position = originalPosition + (distance * x);
This will need a bit more logic to deal with cases where timeNeeded is 0.
Your approach doesn't work. The effect is exactly the same I've been getting all along - i.e., speed changing based on the framerate, in fact it seems even worse than a couple of cases I was able to obtain.