gpt4 book ai didi

delphi - Delphi 中的浮点运算是确定性的吗?

转载 作者:行者123 更新时间:2023-12-03 14:47:21 26 4
gpt4 key购买 nike

Delphi 中的浮点运算是确定性的吗?

即对于使用 Delphi Win32 编译器编译的同一个可执行文件进行相同的 float 学运算,我会得到与使用 Win64 编译器、OS X 编译器、iOS 编译器或 Android 编译器相同的结果吗?

这是一个至关重要的问题,因为我正在游戏引擎中实现多人游戏支持,并且我担心客户端的预测结果通常可能与服务器的最终(和权威)确定不同。

当权威游戏状态数据覆盖客户端的预测状态时,其结果将是客户端出现“滞后”或“抖动”。

由于我实际上没有能力在类似“受控条件”的情况下测试不同平台上使用不同编译器编译的数十种不同设备,因此我认为最好将这个问题交给 Delphi 开发人员看看是否有人对编译器底层的浮点确定性有内部理解。

最佳答案

我认为没有简单的答案。讨论了类似的任务here 。一般来说, float 的表示有两种标准:IEEE 754-1985 和 EEE 754-2008。所有现代(实际上相当古老)的 CPU 都遵循标准,并且它保证了一些事情:

  • 相同标准 float 类型的二进制表示将是相等的
  • 某些操作(不是全部,只是基本操作!)的结果保证是相等的,但前提是编译器将使用相同类型的命令,我不确定这是真的。

但是如果您使用一些扩展运算,例如平方根,即使对于不同型号的桌面CPU,结果也可能会有所不同。您可以阅读这篇文章了解一些详细信息: http://randomascii.wordpress.com/2013/07/16/floating-point-determinism/

附注正如 tmyklebu 提到的,平方根也是由 IEEE 754 定义的,因此可以保证相同输入的加、减、乘、除和平方根得到相同的结果。 IEEE 也定义了很少的其他操作,但对于所有详细信息,最好阅读 IEEE。

关于delphi - Delphi 中的浮点运算是确定性的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24352053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com