iphone - Apple A5 和 Apple A6 CPU 之间的浮点确定性

标签 iphone floating-point box2d deterministic

我正在为 iOS 开发一款采用 Box2D 物理原理的多人游戏。多人游戏照常使用锁步方法。游戏定期更新物理世界。具有相同CPU的iOS设备之间不会出现不同步。

但是,在使用 Apple A6 芯片的新 iOS 设备进行测试时,发生了不同步。查看我的日志文件给我的印象是,不同步发生得非常快,这可能是因为一些浮点操作,我还无法找出是哪一个。

我可以保证,在游戏的设计中,只有Box2D是唯一需要同步的模块,并且根据我的日志,所有多人命令和输入都不会不同步。

我尝试将所有超越函数:sinf、cosf、pow、sqrtf、atan2f 更改为 double 版本,但没有任何运气。

有没有办法强制Apple A6像某些编译器选项一样对待 float 与Apple A5相同?

我将非常感谢任何回答。

最佳答案

许多数学库函数在 A5 和 A6 上使用不同的算法。如果它们的差异超过一两个 ulp,您可能发现了一个错误;请报告。否则,变化可能在高质量数学库的预期容差范围内。要了解其原因,最好的引用是 Ian Ollmann 几年前发送给 mac-games-dev 邮件列表的电子邮件,"the math library is not a security tool" ,它在 Mac OS X 的背景下解决了这个确切的问题。(tl;dr 版本是一些游戏开发人员想要的跨架构提供相同结果的目标,从根本上与提供高精度答案相冲突,因为在所有架构上尽可能高效,这是所有开发人员 [和用户,因为它有利于响应能力和电池生命周期] 所希望的;必须给予一些东西,对于通用系统库,后者必然优先)。 Apple 开发者论坛将是查找信息的另一个好地方。

关于iphone - Apple A5 和 Apple A6 CPU 之间的浮点确定性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13888903/

相关文章:

java - 与 NaN 不同,为什么浮点无穷大是相等的?

ios - 根据 cocos2D 和(?)iPad 上的 Box2d 的触摸轮动画?

box2d - 如何生成纹理以适应形状?

cocos2d-iphone - 将旋转角度转换为 Box2D 脉冲

ios - 您的二进制文件未针对 iPhone 5 进行优化

ios - iPhone - 在 UITableView 中选择编辑按钮时添加 "Add"按钮

iPhone UIPickerView : Change selector height

math - float 学有问题吗?

iphone - 如何在 XCode 4 中扩展堆栈跟踪

delphi - 为什么使用real进行计算与使用int进行计算会得出不同的结果?