Double Math 在多个平台上是否一致?

Is Double Math Consistent across Multiple Platforms?

对于我的确定性物理引擎,我需要确认 C# 中的双精度计算在多个平台上足够一致。有谁知道以下功能在结果上有多少不同?在我的计算机上作为 Windows 32 位应用程序,结果如下(注意:伪代码):

double x = 123.123;
x * 2 = 246.246
Math.Pow (x, 2) = 15159.273129
Math.Sqrt (x) = 11.0960803890383
Math.Sin (x) = -0.56537391969734

我仍然不知道在其他平台或其他语言(我使用的是 C#)上是否会出现相同的结果。如果需要更多信息,我会尽快提供。请,如果有人有知识或时间帮助测试其他平台上的计算,请帮助我克服这种不确定性。

C# 标准 ECMA-334 在部分 11.1.6 浮点类型 "Floating-point operations can be performed with higher precision than the result type of the operation." 中说。

鉴于这种规则,您无法确保在所有地方都能得到完全相同的答案。 "can" 意味着对于相同的计算,某些实现可能使用比其他实现更高的精度。

即使测试表明所有当前实现在一系列输入的所有计算中得到相同的答案,任何平台上的下一个编译器版本可能会改变这一点。如果您确实需要相同的结果,则需要选择一个承诺相同结果的库或类似库。

计算对输入的微小变化的敏感程度各不相同。极端的是一些物理系统的模拟,例如天气,其中输入的微小变化可以扩展到结果的大变化。

了解模拟行为的一种方法是故意扰乱某些值,例如1e15 中的一部分。这对结果的改变是否足够重要?但是,始终存在一些输入导致条件不如其他输入稳定的风险。