也许这是一个愚蠢的问题,但在我最近被迫之前,我从未想过它。
假设程序初始化时具有完全相同的状态,并且没有未初始化变量的未定义行为。在代码执行之前,CPU上的寄存器状态可以不同。假设没有外部现象导致怪异的位翻转。
相同的数值计算序列是否会产生相同的结果(例如,双精度和浮点数的整个位表示)?换句话说,数值误差是确定性的吗?
编辑:我知道指针地址每次都可以不同,但是让抽象指针地址远离在任何计算中使用。
答案 0 :(得分:3)
正式没有,但在实践中主要是是。因此,当DLL中的错误导致其他程序显示不可重现的结果时,人们非常恼火。
我想到的特殊情况涉及一个加载到计算机上每个进程的DLL。我不记得确切的原因,但我认为它是某种输入法编辑器(通常用于非ASCII语言)。这个特殊的DLL做了一些浮点计算,并改变了浮点舍入模式!。