title: Can anyone explain this strange behavior with signed floats in C#?
body: <p>Here is the example with comments:</p>
  
  <pre><code>class Program
  {
      // first version of structure
      public struct D1
      {
          public double d;
          public int f;
      }
  
      // during some changes in code then we got D2 from D1
      // Field f type became double while it was int before
      public struct D2 
      {
          public double d;
          public double f;
      }
  
      static void Main(string[] args)
      {
          // Scenario with the first version
          D1 a = new D1();
          D1 b = new D1();
          a.f = b.f = 1;
          a.d = 0.0;
          b.d = -0.0;
          bool r1 = a.Equals(b); // gives true, all is ok
  
          // The same scenario with the new one
          D2 c = new D2();
          D2 d = new D2();
          c.f = d.f = 1;
          c.d = 0.0;
          d.d = -0.0;
          bool r2 = c.Equals(d); // false! this is not the expected result        
      }
  }
  </code></pre>
  
  <p>So, what do you think about this?</p>