都是C 定点操作确定性的

Are all C++ fixed-point operations deterministic?

本文关键字:确定性 操作 都是      更新时间:2023-10-16

我正在在C 中写一个小的RTS引擎,并想使用锁定同步。

作为浮点确定论,我什至无法希望实现,我必须使用固定点数学。

确定性(在不同的编译器和CPU上)如何在未定义的未签名INT上进行操作?

我对分裂特别感兴趣,因为这会发生舍入。

基本整数类型的大小在不同的平台上有所不同。您可以使用uint32_t和类似类型避免此问题。

签名的整数溢出是未定义的行为,尽管溢出对于未签名的积分类型已明确定义(您执行算术模型2^N)。即便如此,您仍然必须提防,因为模块化算术通常不是您要做的。

我相信,标准曾经是一段时间的距离,这完全是如何舍入的(尽管我不确定"正/正面"是否曾经打开)。但是我认为这现在已经标准化了,即使不是,朝0几乎是普遍的。

但是您可以使用numeric_limits检查。如果可以相信此文档,则该标准确实可以保证朝零舍入。