Jitter during zoom operation

I am working with a basically 2D application that does zoom by scaling X&Y and applying a translate to keep the cursor point steady. This works at lower scale factors, but as the scale factor gets larger it gets jittery. The numbers computed on the CPU look fine using float or double. But when drawn the display can be off by 10s or more pixels. The idea is when applying a zoom the user space coordinates X,Y should display at the same screen coordinate before and after. I use the following to apply the zoom and translation:

        gl.glTranslatef(xTran, yTran, 0.0f);
        gl.glScalef(zoom, zoom, 1.0f);

The problem is that from one frame to the next the point that should be stable is moving around. I presume this is some type of rounding error using floating point numbers, but have yet to find it. The following is example debug output for complementary (zoom in/out) from the CPU side:

Before. Zoom: 6687.519 xt: -6.052199E8 yt: -1.27062797E9 xformed x: 512.0 y: 384.0
Zooming by: 1.010025 inverse: 0.99007446 about: 500.0,441.0
After. Zoom: 6754.5615 xt: -6.1128723E8 yt: -1.28336602E9 xformed x: 512.0 y: 384.0

Before. Zoom: 6754.5615 xt: -6.1128723E8 yt: -1.28336602E9 xformed x: 512.0 y: 384.0
Zooming by: 0.99007446 inverse: 1.010025 about: 500.0,441.0
After. Zoom: 6687.519 xt: -6.052199E8 yt: -1.27062797E9 xformed x: 512.0 y: 384.0

The same jitter happens to geometry in a nested zoom. It moves relative to geometry in the enclosing space. A quad drawn before the glTranslatef and glScalef does not retain the same position relative to one drawn after even when the x/y trans values are 0.0f and the zoom is a steady 0.005f. This seems very odd. I would expect that two shapes would retain relative positioning with stable transforms. That seems pretty basic. Is there something about transformations that I should know about? This happens when the outermost zoom (glScalef/glTranslatef) has a zoom factor in the ramge of several thousand, but that could be my data. I will add some geometry to see if it is happening at lower global scale factors.

More oddness that may help in locating what is going on. I had been using a calculation in the application to adjust for scale on the neted shape. So it wsa jittering when the scale applied by OpenGL did not match the computation including scale in the application. This looks like the same type of jitter I am getting on the entire view when the zoom computation is done in the application to retain the same steady location in the view. Is it possible that when I set the zoom to a float/double it is being rounded or limited to a lower resolution than in the CPU? Can I ask OpenGL to transform a point and return the result rather than doning this in the application without incurring a long dlay for the pipeline to empty?

It does indeed look like it is errors in using floats for transformations. Is there any way to make OpenGL use doubles for the transformation matrix? It looks like I need more precission in representing the scale/translation combination. I can recreate a similar jitter using calculations in the application at about the same time as they appear on-screen. Would I be able to use doubles if I did all the transformations using a vertex shader?