title: 0.0 and -0.0 in Java (IEEE 754)
body: <p>Java is totally compatible with IEEE 754 right? But I'm confused about how java decide the sign of float point addition and substraction. </p>
  
  <p>Here is my test result：</p>
  
  <pre><code>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
  </code></pre>
  
  <p>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?</p>
  
  <p>Also I found Java can somehow distinguish the similarities between 0.0 and -0.0, since</p>
  
  <pre><code>System.out.println(c == b);    //true
  System.out.println(b == c);    //true
  </code></pre>
  
  <p>How does "==" in java works?
  Is it treated as a special case?</p>