C'è già una buona risposta sugli interi, ma penso che i punti mobili non debbano essere eliminati. Nella sua risposta, Byte56 ha scelto l'opzione per l'orbita massima di Plutone, probabilmente presa da questo foglio Excel , quindi mi atterrò a quello.
Ciò pone i confini del sistema solare a:
7.376.000.000 km = 7.376x10 ^ 9 km = 7.376x10 ^ 14 cm ≈ 7.4x10 ^ 14 cm
Il formato a virgola mobile a doppia precisione offre una precisione massima di 15 decimali significativi. Quindi sei fortunato: se la tua origine è al centro del Sole e usi una posizione attorno a Plutone, puoi rappresentare tutti i centimetri, ad esempio in C ++:
printf("%.0Lf\n", 7.4e14);
printf("%.0Lf\n", 7.4e14 + 1.0);
printf("%.0Lf\n", 7.4e14 + 2.0);
Output:
-------
740000000000000
740000000000001
740000000000002
Quindi, se riesci a limitare il tuo gioco all'orbita di Plutone, allora congratulazioni! Hai la precisione sufficiente con i doppi per rappresentarla.
Attenzione però, è abbastanza per rappresentarlo in una simulazione , ma non aspettarti di renderlo indolore. Dovrai convertirti in float a 32 bit, forse cambiare la tua origine in modo da avere abbastanza precisione sugli oggetti vicini e probabilmente dovrai fare affidamento su un po 'di buffer Z e inganno della fotocamera per ottenere tutto questo per renderlo correttamente .
Ora, se vuoi che i tuoi astronauti visitino alcune comete lontane nella nuvola di Oort , che è molto più grande, allora è finita. Intorno a 10 ^ 16 cm, inizi a perdere precisione:
printf("%.0Lf\n", 1.0e16);
printf("%.0Lf\n", 1.0e16 + 1.0);
printf("%.0Lf\n", 1.0e16 + 2.0);
Output:
-------
10000000000000000
10000000000000000 <-- oops
10000000000000002
E peggiora ulteriormente, ovviamente.
Quindi, se ti trovi in questo caso, potresti provare alcune soluzioni più avanzate. Ti suggerisco di dare un'occhiata all'articolo di Peter Freeze in Game Programming Gems 4: "2.3 Risoluzione dei problemi di precisione nelle grandi coordinate mondiali". IIRC, suggerisce un sistema che potrebbe soddisfare le tue esigenze, è davvero una sorta di più spazi coordinati diversi.
Questi sono solo alcuni suggerimenti, probabilmente dovrai usare alcune tue ricette per farlo funzionare. Qualcuno che ha già implementato quel tipo di cose potrebbe aiutarti di più. Perché non inviare un'e-mail ai ragazzi dietro Kerbal Space Program per esempio?
Buona fortuna con il tuo gioco!