title: printing the largest single-precision floating point number
body: <p>I have come seeking knowledge.<br>
  I am trying to understand floating point numbers.<br>
  I am trying to figure out why, when I print the largest floating point number, it does not print correctly.</p>
  
  <pre><code>2-(2^-23)                          Exponent Bits
  1.99999988079071044921875 * (1.7014118346046923173168730371588e+38) = 
      3.4028234663852885981170418348451e+38
  </code></pre>
  
  <p>This should be the largest single-precision floating point number:</p>
  
  <pre><code>340282346638528859811704183484510000000.0
  </code></pre>
  
  <p>So,</p>
  
  <pre><code>float i = 340282346638528859811704183484510000000.0;
  printf(TEXT, "Float %.38f", i);
  Output: 340282346638528860000000000000000000000.0
  </code></pre>
  
  <p>Obviously the number is being rounded up, so I am trying to figure out just exactly what is going on.</p>
  
  <p>My questions are: 
  The Wikipedia documentation states that <code>3.4028234663852885981170418348451e+38</code> is the largest number that can be represented in IEEE-754 fixed point.</p>
  
  <p>Is the number stored in the floating point register = <code>0 11111111 11111111111111111111111</code> and it is just not being displayed incorrectly?</p>
  
  <p>If I write <code>printf(TEXT, "Float %.38f", FLT_MAX);</code>, I get the same answer.
  Perhaps the computer I am using does not use IEEE-754?</p>
  
  <p>I understand errors with calculations, but I don't understand why the number
  <code>340282346638528860000000000000000000000.0</code> is the largest floating point number that can be accurately represented.</p>
  
  <p>Maybe the Mantissa * Exponent is causing calculation errors? If that is true, then <code>340282346638528860000000000000000000000.0</code> would be the largest number that can be faithfully represented without calculation errors. I guess that would make sense. Just need a blessing.</p>
  
  <p>Thanks,</p>