Я думаю, что можно с уверенностью предположить, что каждая платформа имеет реализацию спецификации IEE-754, на которую вы можете положиться, однако, даже если они все реализуют одну и ту же спецификацию, нет гарантии, что каждая платформа имеет одинаковую реализацию , имеет одинаковые установленные флаги управления FP, выполняет те же оптимизации или реализует те же самые нестандартные расширения. Это делает детерминизм с плавающей запятой очень трудным для управления и несколько ненадежным для такого рода вещей (когда вы будете передавать значения FP по сети).
Для получения дополнительной информации об этом; читать http://gafferongames.com/networking-for-game-programmers/floating-point-determinism/
Другая проблема, которую необходимо решить, - это обработка клиентов, у которых нет модуля с плавающей запятой; Большую часть времени это будут бюджетные процессоры, консоли или встроенные устройства. Обязательно примите это во внимание, если хотите нацелиться на них. Эмуляция FP может быть выполнена, но, как правило, она очень медленная на этих устройствах, поэтому вам придется освоиться с вычислениями с фиксированной точкой. Однако следует помнить, что написание сложных классов для абстрагирования вычислений с плавающей запятой и фиксированной запятой в один и тот же код звучит как план; но на большинстве устройств нет. Это не позволяет вам выжать максимальную точность и производительность при работе со значениями с фиксированной точкой.
Еще одна проблема заключается в обработке порядкового номера значений с плавающей запятой, поскольку вы не можете просто поменять байты и снова поместить их в регистр с плавающей запятой (байты могут получить другое значение, см. http://www.dmh2000.com/cpp/dswap.shtml об этом) .
Мой совет - преобразовать числа с плавающей запятой в промежуточные значения с фиксированной запятой, при необходимости выполнить коррекцию порядка байтов и передать ее. Кроме того, не думайте, что два вычисления с плавающей точкой на разных машинах дадут одинаковые результаты; они не Однако реализации с плавающей запятой, отличные от IEEE-754, встречаются редко. Например, графические процессоры, как правило, используют фиксированную точку, но с большей вероятностью имеют подмножество IEEE-754 в наши дни, потому что они не хотят иметь дело с исключениями деления на ноль, но у них будут расширения для половинных чисел, которые соответствуют 16 бит.
Также осознайте, что есть библиотеки, которые уже решили эту проблему (отправка низкоуровневых форматов данных в игровом контексте) для вас. Одной из таких библиотек является RakNet, в частности класс BitStream, предназначенный для надежной отправки данных такого рода на разные платформы с минимальными издержками; например, RakNet переживает довольно много проблем, чтобы не тратить полосу пропускания на отправку строк или векторов.