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

Ngu*_*ung 8 iphone floating-point deterministic box2d

我正在开发一款适用于iOS的Box2D物理多人游戏.多人游戏正常使用锁步法.游戏及时更新物理世界.具有相同CPU的iOS设备之间没有异步.

但是,当使用带有Apple A6芯片的新iOS设备进行测试时,发生了异步.查看我的日志文件给我的印象是,desync发生得非常快,可能是因为我找不到哪些浮点运算.

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

我试过改变所有超越函数:sinf,cosf,pow,sqrtf,atan2f到双版本,但没有任何运气.

有没有办法迫使Apple A6将浮点数与某些编译器选项一样处理Apple A5?

我真的很感激任何答案.

Ste*_*non 5

许多数学库函数在A5和A6上使用不同的算法.如果它们相差超过一两个ulp,你可能发现了一个bug; 请报告.否则,变化可能在优质数学库的预期容差范围内.为了了解其原因,最好的参考是Ian Ollmann几年前发给mac-games-dev邮件列表的电子邮件,"数学库不是一个安全工具",它解决了这个问题. Mac OS X的上下文.(tl; dr版本的目的是在一些游戏开发者想要的架构之间提供比特相同的结果,这与在所有架构上尽可能高效地提供高精度答案相冲突,所有开发人员[和用户,因为它有利于响应能力和电池寿命]需要;必须提供一些东西,而对于通用系统库,后者必须优先考虑.Apple开发者论坛将是寻找信息的另一个好地方.