【发布时间】:2011-09-09 18:16:23
【问题描述】:
浮点计算在处理器上既不关联也不分布。所以,
(a + b) + c 不等于a + (b + c)
而a * (b + c) 不等于a * b + a * c
是否有任何方法可以执行不会给出不同结果的确定性浮点计算。当然,在单处理器上它是确定性的,但在多线程程序中,如果线程相加,例如,它就不是确定性的,因为线程可能存在不同的交错。
所以我的问题是,如何在多线程程序中实现浮点计算的确定性结果?
【问题讨论】:
-
好问题。虽然答案可能是“你不能”或“使用任意精度算术”,但问它是合理的。
-
另外,你需要这个什么样的领域?在某些学科中这是一个真正的问题(例如计算几何),而在其他学科中,浮点计算没有问题(实际上是大多数领域,有一些真正重要的变通方法)。
-
“
a + (b*c)不等于a*b + a*c”——它们曾经相等吗? -
Alexander,我需要它来进行确定性执行,也就是说,如果我多次运行我的程序,它会给出相同的输出。这简化了调试。
-
奥斯汀,是的,现在更正了:)!
标签: c floating-point deterministic