对于我的确定性物理引擎,我需要确认在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#)。如果还需要更多信息,我会尽快提供。如果有任何知识或时间帮助测试其他平台计算的人,请帮助我克服这种不确定性。
答案 0 :(得分:0)
C#标准ECMA-334,在 11.1.6浮点类型&#34中说明;浮点运算的精度高于运算的结果类型&#34 ;.
鉴于这种规则,你无法确定在任何地方得到完全相同的答案。 "可以"意味着某些实现可能使用比其他实现更高的精度,用于相同的计算。
即使测试显示所有当前实现在一系列输入中获得所有计算的相同答案,任何平台上的下一个编译器版本都可能会改变它。如果您确实需要相同的结果,则需要选择承诺相同结果的库或类似物。
计算对输入的微小变化的敏感程度各不相同。极端情况是对某些物理系统(如天气)的模拟,其中输入的微小变化可以扩展到结果的大变化。
了解模拟行为的一种方法是通过例如故意扰乱某些值。 1e15中的一部分。这会改变结果吗?但是,总会有一些风险,即某些投入会导致条件不稳定。