也许这是一个愚蠢的问题,但直到最近我才被迫考虑这个问题。
假设程序以完全相同的状态初始化,并且在未初始化变量的方式中没有未定义的行为。在代码执行之前,CPU 上的寄存器状态可能不同。假设没有外部现象导致反常位翻转。
相同的数值计算序列是否总是产生相同的结果(如 double 和 float 的整个位表示)?换句话说,数值误差是确定性的吗?
编辑:我知道指针地址每次都可能不同,但让我们将指针地址抽象化,避免在任何计算中使用。
最佳答案
正式不是,但实际上大部分是。因此,当 DLL 中的错误导致其他程序显示不可重现的结果时,人们会非常恼火。
我正在考虑的特定案例涉及一个 DLL,它被加载到计算机上的每个进程中。我不记得确切的原因,但我认为它是某种输入法编辑器(通常用于非 ASCII 语言)。这个特殊的 DLL 进行了一些浮点计算,并改变了浮点舍入模式!。
关于c++ - 数值错误是否可重现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38640156/