c++ - 数值错误是否可重现?

标签 c++ precision numerical-computing

也许这是一个愚蠢的问题,但直到最近我才被迫考虑这个问题。

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

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

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

最佳答案

正式不是,但实际上大部分是。因此,当 DLL 中的错误导致其他程序显示不可重现的结果时,人们会非常恼火。

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

关于c++ - 数值错误是否可重现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38640156/

相关文章:

performance - 为什么 Elixir 在解决 Project Euler #5 方面是 Ruby 和 Go 中最慢的?

algorithm - 符号与数值数学 - 性能

C++ #pragma omp 并行 : big tasks or small ones?

c++ - QNetworkAccessManager 在 arch 上给出 ssl 错误

wolfram-mathematica - 在 Mathematica 中写入文件时格式化数字

image - OpenGL:GL_R11F_G11F_B10F的精度对于8位RGB图像来说好吗?

javascript - 为什么 0.3 + 0 == 0.3 和 0.1 + 0 == 0.1 在 javascript 中,而 0.3 和 0.1 不能用二进制精确表示

c++ - webRTC : How to apply webRTC's VAD on audio through samples obtained from WAV file

c++ - 比较文件结尾与字符

c++ - 为性能库制作高效包装器的聪明方法