각 플랫폼에 의존 할 수있는 IEE-754 사양이 구현되어 있다고 가정하는 것이 안전하다고 생각합니다. 그러나 모두 동일한 사양을 구현하더라도 각 플랫폼이 완전히 동일하다는 보장이 없습니다 동일한 FP 컨트롤 플래그가 설정되거나, 동일한 최적화를 수행하거나, 동일한 비표준 확장을 구현합니다. 이것은 부동 소수점 결정을 제어하기가 매우 어렵고 이런 종류의 (FP 값을 네트워크를 통해 통신 할 곳)에 사용하기에는 다소 신뢰할 수 없습니다.
자세한 내용은 여기를 참조하십시오. read http://gafferongames.com/networking-for-game-programmers/floating-point-determinism/
부동 소수점 유닛이없는 클라이언트를 처리하는 데 또 다른 문제가 있습니다. 대부분의 경우 이들은 로우 엔드 CPU, 콘솔 또는 내장 장치가 될 것입니다. 목표를 설정하려면이 점을 고려해야합니다. FP 에뮬레이션은 수행 될 수 있지만 이러한 장치에서 매우 느려지므로 고정 소수점 계산을 수행해야합니다. 그래도 정교한 클래스를 추상 부동 소수점 및 고정 소수점 계산에 동일한 코드로 작성하는 것이 좋습니다. 그러나 대부분의 장치에서는 그렇지 않습니다. 고정 소수점 값을 처리 할 때 최대 정밀도와 성능을 짤 수 없습니다.
부동 소수점 값의 엔디안을 처리하는 또 다른 문제는 바이트를 스왑하고 부동 소수점 레지스터에 'm'을 다시 쌓을 수 없기 때문입니다 (바이트는 다른 의미를 가질 수 있습니다. http://www.dmh2000.com/cpp/dswap.shtml 참조).
나의 조언은 부동 소수점을 중간 값으로 변환하고 필요할 경우 엔디안 보정을 수행하여 전송하는 것입니다. 또한 서로 다른 시스템에서 두 개의 부동 소수점 계산이 동일한 결과를 산출한다고 가정하지 마십시오. 그들은하지 않습니다. 그러나 IEEE-754 이외의 부동 소수점 구현은 거의 없습니다. 예를 들어 GPU는 고정 소수점을 사용하는 경향이 있지만 요즘 IEEE-754의 하위 집합을 가질 가능성이 높습니다. 요즘 IEEE-754는 0으로 나누기 예외를 처리하기를 원하지 않기 때문에 반 부동 소수점에 대한 확장이있을 것입니다. 16 비트.
또한 이미이 문제 (게임 컨텍스트에서 저수준 데이터 형식 보내기)를 해결 한 라이브러리가 있다는 것을 알고 있습니다. 그러한 라이브러리 중 하나 인 RakNet은 특히 BitStream 클래스가 오버 헤드를 최소화하면서 이러한 종류의 데이터를 여러 플랫폼에 안정적으로 전송하도록 설계되었습니다. 예를 들어 RakNet은 문자열이나 벡터를 전송할 때 대역폭을 낭비하지 않도록 상당한 문제를 겪습니다.
당신이 준 결정론은 매우 흥미 롭습니다. 나는 클라이언트가 동기화되었는지 확인하기 위해 더 큰 메시지를 사용하여이를 수행하려고 생각해 왔습니다. 위치가 충분히 가깝다면 (1 단위는 1 미터 임) 괜찮을 것입니다. 콘솔 플랫폼 및 대부분의 임베디드 시스템을 대상으로하지 않습니다. 내가 이것을 자유 소프트웨어로 할 수 있을지 확신 할 수 없다. 저사양 프로세서에 관해서는, 그것은 더 많은 관심사입니다. 바이트 스왑 문제는 매우 불행합니다 ... 간단히 기사를 건너 뛰었지만 나중에 읽어야합니다. 정보를 제공해 주셔서 감사합니다. –
GP2X 및 Open Pandora와 같은 오픈 소스 소프트웨어를 게시 할 수있는 덜 알려진 (핸드 헬드) 콘솔이 있습니다. 부동 소수점 결정론 문제는 주로 물리 루틴을 분산 (예 : 클라이언트에서 실행)하거나 다른 시스템에서 오류를 아주 빨리 축적하는 경향이 있기 때문에 실행을 결정할 때 발생합니다. –