Ya hay una buena respuesta sobre los enteros, pero siento que los puntos flotantes no deberían eliminarse. En su respuesta, Byte56 tomó la opción de ir a la órbita máxima de Plutón, probablemente tomada de esta hoja de Excel , así que me quedaré con eso.
Eso coloca los límites del sistema solar en:
7,376,000,000 km = 7.376x10 ^ 9 km = 7.376x10 ^ 14 cm ≈ 7.4x10 ^ 14 cm
El formato de coma flotante de doble precisión ofrece una precisión máxima de 15 decimales significativos. Así que tienes suerte: si tu origen está en el centro del Sol y usas una posición alrededor de Plutón, puedes representar todos los centímetros, por ejemplo, en C ++:
printf("%.0Lf\n", 7.4e14);
printf("%.0Lf\n", 7.4e14 + 1.0);
printf("%.0Lf\n", 7.4e14 + 2.0);
Output:
-------
740000000000000
740000000000001
740000000000002
Entonces, si puedes limitar tu juego a la órbita de Plutón, ¡felicidades! Tienes la precisión suficiente con dobles para representarlo.
Sin embargo, tenga cuidado, eso es suficiente para representarlo en una simulación , pero no espere renderizar esto sin dolor. Tendrá que convertir a flotadores de 32 bits, tal vez cambie su origen para obtener suficiente precisión en los objetos cercanos, y probablemente tendrá que confiar en algunos trucos Z-buffer y trucos de cámara para obtener todo esto para renderizar correctamente .
Ahora, si quieres que tus astronautas visiten algunos cometas lejanos en la nube de Oort , que es mucho más grande, entonces se acabó. Alrededor de 10 ^ 16 cm, comienza a perder precisión:
printf("%.0Lf\n", 1.0e16);
printf("%.0Lf\n", 1.0e16 + 1.0);
printf("%.0Lf\n", 1.0e16 + 2.0);
Output:
-------
10000000000000000
10000000000000000 <-- oops
10000000000000002
Y empeora aún más, por supuesto.
Entonces, si está en este caso, es posible que desee probar algunas soluciones más avanzadas. Le sugiero que eche un vistazo al artículo de Peter Freeze en Game Programming Gems 4: "2.3 Resolución de problemas de precisión en grandes coordenadas mundiales". IIRC, sugirió un sistema que podría adaptarse a sus necesidades, de hecho, es una especie de múltiples espacios de coordenadas diferentes.
Esas son solo algunas pistas, probablemente tengas que usar alguna receta tuya para que esto funcione. Alguien que ya implementó ese tipo de cosas podría ayudarlo más. ¿Por qué no enviar un correo electrónico a los chicos detrás del Programa espacial Kerbal, por ejemplo?
¡Buena suerte con tu juego!