title: Why does changing 0.1f to 0 slow down performance by 10x?
body: <p>Why does this bit of code,</p>
  
  <pre><code>const float x[16] = {  1.1,   1.2,   1.3,     1.4,   1.5,   1.6,   1.7,   1.8,
                         1.9,   2.0,   2.1,     2.2,   2.3,   2.4,   2.5,   2.6};
  const float z[16] = {1.123, 1.234, 1.345, 156.467, 1.578, 1.689, 1.790, 1.812,
                       1.923, 2.034, 2.145,   2.256, 2.367, 2.478, 2.589, 2.690};
  float y[16];
  for (int i = 0; i &lt; 16; i++)
  {
      y[i] = x[i];
  }
  
  for (int j = 0; j &lt; 9000000; j++)
  {
      for (int i = 0; i &lt; 16; i++)
      {
          y[i] *= x[i];
          y[i] /= z[i];
          y[i] = y[i] + 0.1f; // &lt;--
          y[i] = y[i] - 0.1f; // &lt;--
      }
  }
  </code></pre>
  
  <p>run more than 10 times faster than the following bit (identical except where noted)?</p>
  
  <pre><code>const float x[16] = {  1.1,   1.2,   1.3,     1.4,   1.5,   1.6,   1.7,   1.8,
                         1.9,   2.0,   2.1,     2.2,   2.3,   2.4,   2.5,   2.6};
  const float z[16] = {1.123, 1.234, 1.345, 156.467, 1.578, 1.689, 1.790, 1.812,
                       1.923, 2.034, 2.145,   2.256, 2.367, 2.478, 2.589, 2.690};
  float y[16];
  for (int i = 0; i &lt; 16; i++)
  {
      y[i] = x[i];
  }
  
  for (int j = 0; j &lt; 9000000; j++)
  {
      for (int i = 0; i &lt; 16; i++)
      {
          y[i] *= x[i];
          y[i] /= z[i];
          y[i] = y[i] + 0; // &lt;--
          y[i] = y[i] - 0; // &lt;--
      }
  }
  </code></pre>
  
  <p>when compiling with Visual Studio 2010 SP1. 
  The optimization level was <code>-02</code> with <code>sse2</code> enabled.
  I haven't tested with other compilers.</p>