Уже есть хороший ответ о целых числах, но я чувствую, что плавающие точки не должны быть устранены. В своем ответе Byte56 выбрал максимальную орбиту Плутона, возможно, взятую из этого листа Excel , поэтому я буду придерживаться этого.
Это ставит границы солнечной системы на:
7 376 000 000 км = 7,376x10 ^ 9 км = 7,376x10 ^ 14 см ≈ 7,4x10 ^ 14 см
Формат Double-Precision с плавающей точкой предлагает максимальную точность 15 значащих десятичных знаков. Так что вам повезло: если ваш источник находится в центре Солнца, и вы используете положение вокруг Плутона, вы можете представить все сантиметры, например, в C ++:
printf("%.0Lf\n", 7.4e14);
printf("%.0Lf\n", 7.4e14 + 1.0);
printf("%.0Lf\n", 7.4e14 + 2.0);
Output:
-------
740000000000000
740000000000001
740000000000002
Так что если вы можете ограничить свою игру орбитой Плутона, то поздравляю! У вас достаточно точности с двойными числами, чтобы представить это.
Остерегайтесь , однако, что это достаточно , чтобы представить его в симуляции , но не ждите , чтобы оказывать это безболезненно. Вам придется конвертировать в 32-битные числа с плавающей точкой, возможно, изменить свое происхождение, чтобы получить достаточную точность при закрытии объектов, и вам, вероятно, придется полагаться на некоторый трюк с Z-буфером и усечением камеры, чтобы все это отображалось правильно ,
Теперь, если вы хотите, чтобы ваши астронавты посещали какие-то дальние кометы в облаке Оорта , которое намного больше, тогда все кончено. Примерно через 10 ^ 16 см вы начинаете терять точность:
printf("%.0Lf\n", 1.0e16);
printf("%.0Lf\n", 1.0e16 + 1.0);
printf("%.0Lf\n", 1.0e16 + 2.0);
Output:
-------
10000000000000000
10000000000000000 <-- oops
10000000000000002
И, конечно, в дальнейшем все ухудшается.
Так что если вы в этом случае, вы можете попробовать некоторые более продвинутые решения. Я предлагаю вам взглянуть на статью Питера Фриза в Game Programming Gems 4: «2.3. Решение проблем точности в больших мировых координатах». IIRC, он предлагает систему, которая может удовлетворить ваши потребности, это действительно несколько разных координатных пространств.
Это всего лишь несколько советов, вам, вероятно, придется использовать какой-то собственный рецепт, чтобы запустить его. Кто-то, кто уже реализовал такие вещи, может помочь вам больше. Почему бы, например, не отправить электронное письмо ребятам из космической программы Kerbal ?
Удачи в вашей игре!