Unexpected Gotchas in Making a Game Deterministic
a year ago
- #programming
- #game-development
- #determinism
- 确定性编程需要谨慎设置随机数生成器的种子、处理多线程以及浮点运算。
- 较不常见的陷阱包括编译器差异、编译器选项、标准库实现以及架构不同带来的问题。
- 随机数生成问题源于`std::mt19937`中`uint_fast32_t`的使用,该类型会因架构(32位与64位)而异。
- 标准库分布(如`std::uniform_int_distribution`)在不同实现中可能存在差异,导致非确定性行为。
- 排序和参数求值顺序可能在不同平台(如Linux与Windows)上产生不同结果。
- 内存使用限制是非确定性的,因为指针大小、对齐要求和STL实现存在差异。
- 要实现确定性的内存限制管理,需要比单纯控制分配大小更高层次的抽象机制。
- 文末提供了关于确定性浮点计算和游戏确定性的外部参考资料链接。