相等的加法属性对浮点数有效吗?

Dar*_*rko 2 floating-point precision algebra

也就是说,如果我有两个浮点数(IEEE-754二进制浮点数)a和b,我计算c如下:

c = a - b
Run Code Online (Sandbox Code Playgroud)

这总是真的吗?

c + b == a
Run Code Online (Sandbox Code Playgroud)

这个简单问题的答案出奇地难以在互联网上找到答案。我找到的最接近的东西是这篇论文。也许我只是没有使用正确的术语。

Pat*_*han 5

您肯定需要添加一些排除溢出的条件。这个java程序打印“false”。

public strictfp class Test {
    public static void main(String[] args) {
        double a = Double.MAX_VALUE;
        double b = -Double.MAX_VALUE;
        double c = a-b;
        System.out.println(c+b == a);
    }
}
Run Code Online (Sandbox Code Playgroud)

a-b在实数算术中是最大有限双精度的两倍。在浮点运算中,它溢出到无穷大。