代码之家  ›  专栏  ›  技术社区  ›  Fragsworth

我能假设Flash和PHP将生成相同的浮点数吗?

  •  2
  • Fragsworth  · 技术社区  · 16 年前

    在我正在开发的多人游戏中,我们有几个浮点数。后端(在PHP中)和前端(在Flash中)偶尔对这些数字执行相同的计算,以最小化通信。

    我目前正在确保双方都使用64位双倍,但我可以安全地假设所有的计算都是相同的吗?

    例如,字符串到浮点的转换呢?我是否应该担心Flash的实现可能与PHP不同(如果发生这种情况,我们的游戏将失去同步-客户端将认为它处于一种状态,而服务器处于另一种状态)

    出现

    3 回复  |  直到 16 年前
        1
  •  2
  •   artificialidiot    16 年前

    你不能,因为不同的编译器甚至可以为同一个表达式生成不同的代码,但是我们正在比较上帝所编译的不同的解释器。

    通常情况下,根据所需的精度,您会很好,但在计算数学上应该相同但实际上不相同的数字时,会出现边缘情况,因为操作顺序不同,就像试图平衡针尖上的针一样。定期更新并不能改变这样一个事实,即数字在很大程度上会略有不同。

    如果你想使用浮点数,你应该在设计数值算法时考虑到一些误差。或者,您可以仅针对性能可能受网络限制但在其他地方使用浮点的状态使用定点算法。

        2
  •  0
  •   Blindy    16 年前

    我会假设它确实是同一个浮点代码。除此之外,您还定期发送检查点(计算完整数据的帧,而不仅仅是增量),对吗?任何小错误都会在这些过程中得到纠正。

        3
  •  0
  •   luvieere    16 年前

    好吧,如果你能限制有效小数位的数量,这样你就不会暴露在舍入错误中,并且使用你自己版本的字符串到浮点的转换,以及任何其他你认为可能对平台有不同影响的方法,我认为你是好的。