1

也许这是一个愚蠢的问题,但直到我最近才被迫这样做,我才想到它。

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

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

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

4

1 回答 1

3

形式上没有,但实际上大多是。因此,当 DLL 中的错误导致其他程序出现不可重现的结果时,人们会非常恼火。

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

于 2016-07-28T15:19:20.960 回答