Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以假设Flash和PHP将生成相同的浮点数吗?_Php_Flash_Actionscript 3_Floating Point_Client Server - Fatal编程技术网

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

我可以假设Flash和PHP将生成相同的浮点数吗?,php,flash,actionscript-3,floating-point,client-server,Php,Flash,Actionscript 3,Floating Point,Client Server,在我正在开发的多人游戏中,我们有几个浮点数。后端(PHP)和前端(Flash)偶尔会对这些数字执行相同的计算,以最小化通信 我目前正在确保双方都使用64位双精度,但我是否可以安全地假设所有计算都是相同的 例如,字符串到浮点的转换呢?我是否应该担心Flash的实现可能与PHP不同?(如果发生这种情况,我们的游戏将失去同步-客户端将认为它处于一种状态,而服务器处于另一种状态) 通过一些测试,看起来是一样的,但我不确定。有人能帮我澄清一下吗?我会假设它确实是同一个浮点代码。此外,您还发送定期检查点(计

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

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

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


通过一些测试,看起来是一样的,但我不确定。有人能帮我澄清一下吗?

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

如果您可以限制有效小数位数,这样您就不会暴露于舍入错误,并滚动您自己版本的字符串到浮点转换以及您怀疑可能对平台产生不同影响的任何其他方法,我认为你很好。

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

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


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

您将游戏状态存储在64位浮点中?你能用64位整数代替吗?浮动是最邪恶的事情,比如说,IE 6。我想补充一点,flash的数学在这样的精度上是糟糕的。你可以在这里读到更多——你在评论中说的是对的。你可以从测试平台之间的这种边缘情况开始,以检查不一致性。@熊会吃掉你:浮动不是邪恶的。使用不理解语义的类型的人是邪恶的。还有熊。熊是邪恶的。但是限制有效的小数位数对于ceil(x)这样的操作没有任何作用,其中x可以是1.00000000001或0.99999999