Java is totally compatible with IEEE 754 right? But I'm confused about how java decide the sign of float point addition and substraction.
Here is my test result:
double a = -1.5;
double b = 0.0;
double c = -0.0;
System.out.println(b * a); //-0.0
System.out.println(c * a); //0.0
System.out.println(b + b); //0.0
System.out.println(c + b); //0.0
System.out.println(b + c); //0.0
System.out.println(b - c); //0.0
System.out.println(c - b); //-0.0
System.out.println(c + c); //-0.0
I think in the multiplication and division, the sign is decided like: sign(a) xor sign(b), but I wonder why 0.0 + -0.0 = 0.0, how does Java decide the sign in addition and substraction? Is it described in IEEE 754?
Also I found Java can somehow distinguish the similarities between 0.0 and -0.0, since
System.out.println(c == b); //true
System.out.println(b == c); //true
How does "==" in java works? Is it treated as a special case?