Es gibt bereits eine gute Antwort zu ganzen Zahlen, aber ich bin der Meinung, dass Gleitkommazahlen nicht beseitigt werden sollten. In seiner Antwort hat Byte56 die Option gewählt, die maximale Umlaufbahn von Pluto anzustreben, die wahrscheinlich aus dieser Excel-Tabelle stammt , also werde ich mich daran halten.
Das setzt die Grenzen des Sonnensystems an:
7,376,000,000 km = 7,376 × 10 9 km = 7,376 × 10 14 cm × 7,4 × 10 14 cm
Das Gleitkommaformat mit doppelter Genauigkeit bietet eine maximale Genauigkeit von 15 signifikanten Dezimalstellen. Sie haben also Glück: Wenn Ihr Ursprung im Zentrum der Sonne liegt und Sie eine Position um Pluto verwenden, können Sie alle Zentimeter darstellen, z. B. 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
Wenn Sie Ihr Spiel also auf die Umlaufbahn von Pluto beschränken können, dann herzlichen Glückwunsch! Du hast gerade genug Präzision mit Doppel, um es darzustellen.
Beachten Sie jedoch, dass genug ist es in einer darzustellen Simulation , aber erwarten Sie nicht machen dies schmerzlos. Sie müssen in 32-Bit-Floats konvertieren, möglicherweise Ihren Ursprung ändern, damit Sie eine ausreichende Präzision für die nahen Objekte erzielen, und Sie müssen sich wahrscheinlich auf einige Z-Buffer- und Kamerastumpf-Tricks verlassen, um das alles richtig rendern zu können .
Wenn Sie möchten, dass Ihre Astronauten einige weit entfernte Kometen in der Oort-Wolke besuchen , die viel größer ist, dann ist es vorbei. Ab 10 ^ 16 cm verlieren Sie an Genauigkeit:
printf("%.0Lf\n", 1.0e16);
printf("%.0Lf\n", 1.0e16 + 1.0);
printf("%.0Lf\n", 1.0e16 + 2.0);
Output:
-------
10000000000000000
10000000000000000 <-- oops
10000000000000002
Und es wird natürlich weiter schlimmer.
In diesem Fall möchten Sie möglicherweise einige weiterführende Lösungen ausprobieren. Ich schlage vor, Sie werfen einen Blick auf Peter Freezes Artikel in Game Programming Gems 4: "2.3 Lösen von Genauigkeitsproblemen in großen Weltkoordinaten". IIRC, schlägt er ein System vor, das Ihren Anforderungen entspricht, es ist in der Tat eine Art von mehreren verschiedenen Koordinatenräumen.
Das sind nur ein paar Tipps, wahrscheinlich müssen Sie ein eigenes Rezept verwenden, um dies zum Laufen zu bringen. Jemand, der solche Dinge bereits implementiert hat, könnte Ihnen mehr helfen. Warum nicht zum Beispiel eine E-Mail an die Jungs hinter dem Kerbal Space Program schicken?
Viel Glück mit deinem Spiel!