Il y a déjà une bonne réponse à propos des entiers, mais je pense que les virgules flottantes ne devraient pas être éliminées. Dans sa réponse, Byte56 a pris l'option d'opter pour l'orbite maximale de Pluton, probablement tirée de cette feuille Excel , donc je m'en tiendrai à cela.
Cela place les limites du système solaire à:
7,376,000,000 km = 7,376x10 ^ 9 km = 7,376x10 ^ 14 cm cm 7,4x10 ^ 14 cm
Le format à virgule flottante double précision offre une précision maximale de 15 décimales significatives. Vous avez donc de la chance: si votre origine est au centre du Soleil et que vous utilisez une position autour de Pluton, vous pouvez représenter tous les centimètres, par exemple 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
Donc, si vous pouvez limiter votre jeu à l'orbite de Pluton, alors félicitations! Vous avez juste assez de précision avec des doubles pour le représenter.
Attention cependant, cela suffit pour le représenter dans une simulation , mais ne vous attendez pas à rendre sans douleur. Vous devrez convertir en flottants 32 bits, peut-être changer votre origine pour obtenir suffisamment de précision sur les objets proches, et vous devrez probablement compter sur un tampon Z et une tromperie de tronc de caméra pour obtenir tout cela pour un rendu correct .
Maintenant, si vous voulez que vos astronautes visitent des comètes lointaines dans le nuage d'Oort , qui est bien plus grand, alors c'est fini. Vers 10 ^ 16 cm, vous commencez à perdre de la précision:
printf("%.0Lf\n", 1.0e16);
printf("%.0Lf\n", 1.0e16 + 1.0);
printf("%.0Lf\n", 1.0e16 + 2.0);
Output:
-------
10000000000000000
10000000000000000 <-- oops
10000000000000002
Et cela empire plus loin, bien sûr.
Donc, si vous êtes dans ce cas, vous voudrez peut-être essayer des solutions plus avancées. Je vous suggère de lire l'article de Peter Freeze dans Game Programming Gems 4: "2.3 Résolution des problèmes de précision dans les grandes coordonnées mondiales". IIRC, il suggère un système qui pourrait répondre à vos besoins, c'est en fait une sorte de multiples espaces de coordonnées différents.
Ce ne sont que quelques conseils, vous devrez probablement utiliser une de vos recettes pour que cela fonctionne. Quelqu'un qui a déjà implémenté ce genre de choses pourrait vous aider davantage. Pourquoi ne pas envoyer un e-mail aux gars derrière Kerbal Space Program par exemple?
Bonne chance avec votre jeu!