My pet annoyance for a long time has been smooth movement. Why is it so difficult to move say a large game sprite from one side of the screen to the other without jittering?

I am hoping people have some suggestions to help improve the way in which sprites can be moved.

Typically the way I do it is as follows.

The coordinates of a 2d or 3d sprite are x,y,z as a single or double.

current location is updated using the speed lag of the system. i.e. the number of milliseconds it takes for the computer to come back and run through a timer loop.

So; x :=x + (100 * Timerlag);

Where timerlag is a proportion for example 16 ms divided by 1000. The 16 ms is the time it takes for the computer to run through the timer again. Using this system I should find that my object travels 100 pixels in one second, and on the whole looks ok. However I find that the movement is never consistent and that the object tends to jerk every once in a while. This is not so noticeable in a game where a sprite constantly switches directions, but it is noticeable when you have a large object that needs to "slide" from one place to another.

With 3d objects I can leave the x,y,z coords as singles but for 2d stuff the sprite is usually drawn by trunc(x). In both cases I still see jerky movements.

I have tried a few optimizations; like finding an average for timerlag over N number of frames and then use that value instead of a constantly changing value. This work to some extent. It has the added benefit that it is not possible for the sprite location to all of a sudden change by a large amount. I have had this occur in the past, Windows would all of a sudden decide to put time into accessing an idle drive and the resulting timerlag would send a sprite straight through a wall or similar.

How do others move their sprites and has any one got an idea to improve the smoothness or consistency of movement?