I.E.我将使用Delphi Win32编译器编译的相同可执行文件中的相同浮点数学运算得到相同的结果,就像我使用Win64编译器,OS X编译器,iOS编译器或Android编译器一样?
这是一个至关重要的问题,因为我正在我的游戏引擎中实现多人游戏支持,我担心客户端的预测结果可能经常与服务器的确定(和权威)决定不同.
其结果是当权威游戏状态数据否决客户端侧的预测状态时,在客户端出现“滞后”或“急躁”.
由于我实际上没有能力在不同编译器上编译的不同平台上测试数十种不同的设备,而这些设备类似于“受控条件”,我认为最好将这个问题提交给Delphi开发人员,看看是否有人对编译器的低级浮点确定性有内在的理解.
解决方法
通常,浮点数的表示有两个标准:
IEEE 754-1985和EEE 754-2008.
所有现代(实际上很老)的cpu都遵循标准,它保证了一些东西:
>相同标准浮动类型的二进制表示将是相同的
>一些操作的结果(不是全部,只有基本操作!)保证是相等的,但只有当编译器使用相同类型的命令时,我不确定它是否为真.
但是,如果使用某些扩展操作(例如平方根),即使对于不同型号的桌面cpu,结果也可能会有所不同.您可以阅读这篇文章了解一些细节:
http://randomascii.wordpress.com/2013/07/16/floating-point-determinism/
附:正如tmyklebu所提到的,平方根也是由IEEE 754定义的,因此对于Add,Subtract,Multiply,Divide和Square root的相同输入可以保证相同的结果. IEEE还定义了很少的其他操作,但是对于所有细节,最好阅读IEEE.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。