所有C++定点操作都是确定性的吗?

lin*_*nes 9 c++ fixed-point

我正在用C++编写一个小型RTS引擎,并希望使用锁步同步.

由于浮点确定性是我甚至无法实现的,我必须使用定点数学.

确定性地(在不同的编译器和cpus上)是如何定义无符号整数的典型操作的?

我对分工特别感兴趣,因为这会导致四舍五入.

小智 5

基本整数类型的大小因平台而异.您可以通过使用uint32_t和类似的类型来避免此问题.

有符号整数溢出是未定义的行为,尽管溢出是为无符号整数类型定义的(你做算术模数2^N).即使如此,你还要注意它,因为模数运算通常不是你想要做的.

我相信这个标准曾经一度打开了究竟如何划分(虽然我不确定"积极/积极"是否会被打开).但我认为现在已经标准化了,即使没有,向0走向几乎是普遍的.

但你可以numeric_limits用来检查.如果要相信这个文档,标准确实保证向零舍入.