c++ - IEEE Std 754 Floating-Point : let t := a - b, 标准是否保证 a == b + t?

标签 c++ c floating-point ieee-754

假设t,a,b都是 double (IEEE Std 754)变量,a, b 不是 NaN(但可能是 Inf)。 在 t = a - b 之后,我一定有 a == b + t 吗?

最佳答案

绝对不是。一个明显的例子是 a=DBL_MAXb=-DBL_MAX。那么t=INFINITY,所以b+t也是INFINITY

可能更令人惊讶的是,有些情况下会发生这种情况而没有任何溢出。基本上,它们都是 a-b 不准确的形式。例如,如果 aDBL_EPSILON/4 并且 b-1,则 a-b 为 1(假设默认舍入模式),a-b+b 则为 0。

我提到第二个示例的原因是,这是在 IEEE 算法中强制舍入到特定精度的规范方法。例如,如果您有一个 [0,1) 范围内的数字并希望将其强制四舍五入到 4 位精度,您可以先加然后减 0x1p49

关于c++ - IEEE Std 754 Floating-Point : let t := a - b, 标准是否保证 a == b + t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10791894/

相关文章:

python - PyCFunction_New/PyCFunction_NewEx的文档

c - 释放指针时中止陷阱

parsing - Bison 语法中的浮点被截断

java - IBM-IEEE double 浮点字节转换

c - float 一个( float );意义?

c++ - 模仿 std::function 模板参数

c++ - 返回类型后的静态关键字

c++ - 奇怪的编译问题 - 无法识别的类没有编译器错误

c - fputc无法将字符写入文件?

c - 如何判断哪个pthread唤醒了pthread? C