【发布时间】:2010-09-24 14:59:40
【问题描述】:
我了解浮点计算存在准确性问题,并且有很多问题可以解释原因。我的问题是,如果我两次运行相同的计算,我是否可以始终依靠它来产生相同的结果?哪些因素可能会影响这一点?
- 计算之间的时间?
- CPU 的当前状态?
- 不同的硬件?
- 语言/平台/操作系统?
- 太阳耀斑?
我有一个简单的物理模拟,想记录会话以便回放。如果可以依赖计算,那么我只需要记录初始状态以及任何用户输入,并且我应该始终能够准确地再现最终状态。如果计算不准确,开始时的错误可能会在模拟结束时产生巨大影响。
我目前在 Silverlight 工作,但我很想知道这个问题是否可以得到一般性的回答。
更新:最初的答案是肯定的,但显然这并不完全明确,正如所选答案的 cmets 中所讨论的那样。看来我必须做一些测试,看看会发生什么。
【问题讨论】:
-
在 Silverlight 中,您正在处理 JIT 编译器 - 这意味着数学运算可能会自动利用 SSE、MMX 和其他特殊指令,并且这些或其他更改可能会修改执行指令的确切顺序:A+使用浮点值时,B+C 可能不会给出与 C+B+A 相同的结果。因此,在同一台机器上运行时,您会得到确定性的结果,但在另一台处理器上可能会得到不同的结果,甚至是稍微不同的系统配置。
-
按精度排序的浮点数:十进制、双精度、浮点数。
-
这取决于月相。
标签: c# silverlight math floating-point