Delphi中的浮点数运算是否是确定性的?
换句话说,当我在使用Delphi Win32编译器、Win64编译器、OS X编译器、iOS编译器或者Android编译器对同一程序进行相同的浮点数操作时,是否会得到相同的结果?
这是至关重要的问题,因为我正在实现游戏引擎的多人支持功能,我担心客户端的预测结果经常与服务器端的权威决策不同。
如果出现这种情况,客户端将出现“延迟”或“卡顿”。
由于我实际上没有能力在任何类似于“控制条件”的情况下测试不同平台、不同编译器编译的几十个不同设备,所以我想请Delphi开发者回答这个问题,看看有没有人对编译器底层的浮点数确定性有内部理解。
换句话说,当我在使用Delphi Win32编译器、Win64编译器、OS X编译器、iOS编译器或者Android编译器对同一程序进行相同的浮点数操作时,是否会得到相同的结果?
这是至关重要的问题,因为我正在实现游戏引擎的多人支持功能,我担心客户端的预测结果经常与服务器端的权威决策不同。
如果出现这种情况,客户端将出现“延迟”或“卡顿”。
由于我实际上没有能力在任何类似于“控制条件”的情况下测试不同平台、不同编译器编译的几十个不同设备,所以我想请Delphi开发者回答这个问题,看看有没有人对编译器底层的浮点数确定性有内部理解。
sin
或cos
这样的超越函数,我认为您不能期望得到相同的结果。如果您将问题限制在对Double
或Single
类型进行的四则运算上,也许您可以获得相同的结果,但我不喜欢依赖它,因为浮点运算模式的改变甚至可以在单个平台上改变浮点运算的结果。 - kludg