我正在开发一个多人游戏,它依赖于所谓的“浮点确定性”,换句话说,所有计算的结果必须在运行游戏的每个人身上完全相同。这意味着不能使用IEEE 754浮点数,因为操作可能会根据舍入模式、融合乘加或倒数平方根指令以及不同的libc实现等产生不同的值。
因此,我已经制作了所有基本算术运算甚至一些超越函数的定点版本。然而,我仍想使用浮点字面量来配置游戏变量。在这样做时,我最终得到了像这样的代码,以将浮点数转换为定点数:
explicit NetFixedPoint(float val)
{
static const StorageType kOne = StorageType(1) << FractionalBits;
m_Value = ((StorageType)(val * kOne));
}
这会在所有平台和处理器体系结构上给我相同的结果吗?
int
在所有平台上的大小并不一致,但在大多数实现中,您对 IEEE754 有足够的控制来获得一致的舍入模式等。 - user207421