数值误差是否可重现?

时间:2016-07-28 15:04:21

标签: c++ precision numerical-computing

也许这是一个愚蠢的问题,但在我最近被迫之前,我从未想过它。

假设程序初始化时具有完全相同的状态,并且没有未初始化变量的未定义行为。在代码执行之前,CPU上的寄存器状态可以不同。假设没有外部现象导致怪异的位翻转。

相同的数值计算序列是否会产生相同的结果(例如,双精度和浮点数的整个位表示)?换句话说,数值误差是确定性的吗?

编辑:我知道指针地址每次都可以不同,但​​是让抽象指针地址远离在任何计算中使用。

1 个答案:

答案 0 :(得分:3)

正式没有,但在实践中主要是是。因此,当DLL中的错误导致其他程序显示不可重现的结果时,人们非常恼火。

我想到的特殊情况涉及一个加载到计算机上每个进程的DLL。我不记得确切的原因,但我认为它是某种输入法编辑器(通常用于非ASCII语言)。这个特殊的DLL做了一些浮点计算,并改变了浮点舍入模式!