Jest już dobra odpowiedź na temat liczb całkowitych, ale wydaje mi się, że zmiennoprzecinkowe nie powinny być eliminowane. W swojej odpowiedzi Byte56 wybrał maksymalną orbitę Plutona, prawdopodobnie pobraną z tego arkusza programu Excel , więc pozostanę przy tym.
To stawia granice Układu Słonecznego w:
7 376 000 000 km = 7,376x10 ^ 9 km = 7,376x10 ^ 14 cm ≈ 7,4x10 ^ 14 cm
Double oferty dokładnością maksymalnie 15 znaczących miejsc po przecinku. Więc masz szczęście: jeśli twoje pochodzenie znajduje się w centrum Słońca i używasz pozycji wokół Plutona, możesz reprezentować wszystkie centymetry, np. W C ++:
printf("%.0Lf\n", 7.4e14);
printf("%.0Lf\n", 7.4e14 + 1.0);
printf("%.0Lf\n", 7.4e14 + 2.0);
Output:
-------
740000000000000
740000000000001
740000000000002
Więc jeśli możesz ograniczyć grę do orbity Plutona, gratulacje! Masz wystarczającą precyzję z podwójnymi, aby to reprezentować.
Uważaj jednak, że to wystarczy do reprezentowania go w symulacji , ale nie należy się spodziewać, aby uczynić to bezboleśnie. Będziesz musiał przekonwertować na 32-bitowe zmiennoprzecinkowe, może zmienić pochodzenie, aby uzyskać wystarczającą precyzję na bliskich obiektach i prawdopodobnie będziesz musiał polegać na buforze Z i sztuczce aparatu, aby uzyskać to wszystko, aby poprawnie renderować .
Teraz, jeśli chcesz, aby astronauci odwiedzili odległe komety w chmurze Oort , która jest znacznie większa, to koniec. Około 10 ^ 16 cm zaczyna tracić dokładność:
printf("%.0Lf\n", 1.0e16);
printf("%.0Lf\n", 1.0e16 + 1.0);
printf("%.0Lf\n", 1.0e16 + 2.0);
Output:
-------
10000000000000000
10000000000000000 <-- oops
10000000000000002
I oczywiście dalej się pogarsza.
Jeśli tak jest, możesz wypróbować bardziej zaawansowane rozwiązania. Proponuję rzucić okiem na artykuł Petera Freeze'a w Gems Programming Game 4: „2.3 Rozwiązywanie problemów z dokładnością współrzędnych dużego świata”. IIRC, sugeruje system, który może pasować do twoich potrzeb, to rzeczywiście coś w rodzaju wielu różnych współrzędnych przestrzeni.
To tylko kilka wskazówek, prawdopodobnie będziesz musiał użyć własnego przepisu, aby uruchomić to. Ktoś, kto już zaimplementował tego rodzaju rzeczy, może ci pomóc. Dlaczego na przykład nie wysłać e-maila do facetów programu kosmicznego Kerbal ?
Powodzenia w grze!