title: Why does MSVS not optimize away +0?
body: <p>This <a href="https://stackoverflow.com/questions/9314534/why-does-changing-0-1f-to-0-slow-down-performance-by-10x">question</a> demonstrates a very interesting phenomenon: <a href="http://en.wikipedia.org/wiki/Denormal_number" rel="noreferrer">denormalized</a> floats slow down the code more than an order of magnitude.</p>
  
  <p>The behavior is well explained in the <a href="https://stackoverflow.com/a/9314926/1145760">accepted answer</a>. However, there is one comment, with currently 153 upvotes, that I cannot find satisfactory answer to:</p>
  
  <blockquote>
    <p>Why isn't the compiler just dropping the +/- 0 in this case?!? –
    <strong>Michael Dorgan</strong></p>
  </blockquote>
  
  <p><sub>Side note: I have the impression that 0f is/must be exactly representable (furthermore - it's binary representation must be all zeroes), but can't find such a claim in the c11 standard. A quote proving this, or argument disproving this claim, would be most welcome. Regardless, <em>Michael</em>'s question is the main question here.</sub></p>
  
  <hr>
  
  <p><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf" rel="noreferrer">§5.2.4.2.2</a></p>
  
  <blockquote>
    <p>An implementation may give zero and values that are not floating-point
    numbers (such as infinities and NaNs) a sign or may leave them
    unsigned.</p>
  </blockquote>