Quote: "as my object moves, it gradually develops a shake, which gets worse over time"
You may have fallen foul of floating point limitations.
Firstly, floating point numbers take up 4 bytes of memory. 4 Bytes of memory can hold just over 4 billion different combinations of bits. However, floats can hold numbers from as small as 1x10^-38, up to 3.4x10^38 - a much larger range than can be stored in 4 bytes.
It does this by using a logarithmic scale - you always have around 7 significant digits of accuracy, and the decimal point moves around.
For example:
1.0000001 is probably OK, range-wise, but 1.0000000001 won't be.
1000001 is probably OK too, but 1000000001 won't be.
Basically, as the numbers get larger, the minimum 'steps' between representations of those numbers also become larger.
Also something to take into account is that in the same way as you can't represent 1/3 in decimal, there are numbers that can't be represented fully using floating point - 1/10 can't for example (although I believe DBPro will show you the correct result, it's 'cheating' slightly by dropping precision and rounding).
Now, how does that aid you? It doesn't. But this might...
One way to deal with this is to determine the point where the numbers become 'too large' for your program, and then reset everything back to the origin.
For example, your camera is at 10000.0, 0.0, 0.0 and what you are aiming for is at 10500.00, 0.0, 0.0 - you reset your camera back to 0.0, 0.0, 0.0, and then move your target by a like amount to 500.0, 0.0, 0.0 and do the same for all other assets in the game arena.