I'm copying the depth buffer to a floating point texture like this:

glBindTexture( id )
glTexImage2D(GL_TEXTURE_RECTANGLE_ARB,0,GL_DEPTH_COMPONENT32F,width,height,0,GL_DEPTH_COMPONENT,GL_FLOAT,0);
glReadBuffer(GL_BACK);
glCopyTexSubImage2D(GL_TEXTURE_RECTANGLE_ARB,0,0,0,0,0,width,height);

But then in a fragment shader, I can't tell exactly what I get when I sample the texture. What I get
does seem to make sense (if I do gl_FragColor = vec4( depth, depth, depth, 1 ), what is closer to the camera is darker)I know it is in the range [0,1]. I tried quantizing the values and on a 3D plane, I get banding where each band is of equal size, which seems to suggest the data is linear (which was a surprise to me because gl_FragCoord.z doesn't have a linear relationship with world-space distance of fragments to the camera).

My question is: what is the format of that data, and how can I transform it to absolute distance to eye?