我认为可以安全地假设每个平台都有一个你可以依赖的 IEE-754 规范的实现,但是,即使它们都实现了相同的规范,也不能保证每个平台都有完全相同的实现,有设置相同的 FP 控制标志,执行相同的优化,或实现相同的非标准扩展。这使得浮点确定性非常难以控制,并且在这种情况下使用起来有些不可靠(您将通过网络传达 FP 值)。
有关这方面的更多信息;阅读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 的子集,因为它们不想处理被零除的异常,但它们将具有适合的半浮点数扩展16 位。
还要意识到已经有一些库已经为您解决了这个问题(在游戏环境中发送低级数据格式)。RakNet 就是一个这样的库,特别是它的 BitStream 类旨在将这些类型的数据可靠地发送到不同的平台,同时将开销保持在最低限度;例如,RakNet 在不浪费任何带宽发送字符串或向量方面遇到了一些麻烦。