정수에 대해서는 이미 좋은 대답이 있지만 부동 소수점을 제거하지 않아야한다고 생각합니다. 그의 대답에서 Byte56은 아마도이 엑셀 시트 에서 가져온 명왕성의 최대 궤도로 갈 수있는 옵션을 사용 했기 때문에 그 점을 고수하겠습니다.
태양계의 경계는 다음과 같습니다.
7,376,000,000km = 7.376x10 ^ 9km = 7.376x10 ^ 14cm ≈ 7.4x10 ^ 14cm
두 번 정밀 부동 소수점 형식의 이벤트 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- 버퍼와 카메라 절두체 속임수에 의존하여이 모든 것이 제대로 렌더링되도록해야합니다. .
우주 비행사가 Oort 클라우드 에서 멀리 떨어진 혜성을 방문하기를 원한다면 끝났습니다. 10 ^ 16cm 전후로 정확도를 잃기 시작합니다.
printf("%.0Lf\n", 1.0e16);
printf("%.0Lf\n", 1.0e16 + 1.0);
printf("%.0Lf\n", 1.0e16 + 2.0);
Output:
-------
10000000000000000
10000000000000000 <-- oops
10000000000000002
그리고 물론 더 악화됩니다.
따라서이 경우 고급 솔루션을 사용해보십시오. Peter Freeze의 Game Programming Gems 4 : "2.3 큰 세계 좌표의 정확도 문제 해결" 기사를 살펴 보는 것이 좋습니다 . IIRC, 그는 당신의 필요에 맞는 시스템을 제안합니다. 그것은 실제로 여러 다른 좌표 공간입니다.
그것은 단지 힌트 일뿐입니다. 아마도 당신은 이것을 실행하기 위해 당신 만의 레시피를 사용해야 할 것입니다. 이런 종류의 것을 이미 구현 한 사람이 더 도움이 될 수 있습니다. 예를 들어 Kerbal Space Program 뒤에있는 사람들에게 이메일을 보내지 않겠습니까?
게임에 행운을 빕니다!