I'm not sure if this is really addressing your problem but I'll give you my experiences with double and float.
I'm building worlds with a very large range of numbers. It requires doubles or alternatively some likely error prone system of coordinate translation. My current strategy is to calculate everything in double on the CPU side. Although I'm sure you can mix and match in places, I think for initial development keeping everything double will save you some heartache. Later you can go back an optimize things if you feel the need.
The GPU is a whole different story since typically many cards aren't really optimized for double (apparently many intentionally). The trick is when going from CPU to GPU to translate everything so your camera is near (0.0,0.0,0.0) and as you do so simultaneously convert to float.
Since things in the distance need far less precision this works fairly well. For instance if a far away hill that is 100 meters height is now 99.5 meters high due to precision loss, a player will never notice it. As you approach the hill you will have to send it's vertexes down again anyway to get the required detail with you terrain and and that point the precision will fix itself since the data will be progressively closer to the camera.
This does however add one more requirement to your system....... You need a very robust LOD (Level of Detail) system. Detailed objects at distance are going to be a problem be they will induce Z-fighting since the precision simply isn't there. How you handle this has a lot to do with your basic graphics system. But generally you are not displaying small objects at distance anyway, so hopefully a lot of his should take care of itself.
Again I'm not sure if this really answers you question, but maybe you can glean something from it.