title: Floating point limits (double) defined with long double suffix L
body: <p><strong>1.
  Question:</strong></p>
  
  <p>I have a question about the <code>DBL_MAX</code> and <code>DBL_MIN</code> definition in Linux with gcc v4.8.5.<br>
  They are defined in <code>limit.h</code> as:</p>
  
  <pre><code>#define DBL_MAX     __DBL_MAX__
  #define DBL_MIN     __DBL_MIN__
  </code></pre>
  
  <p>where <code>__DBL_MIN__</code> and <code>__DBL_MAX__</code> are compiler specific and can be obtained by:</p>
  
  <pre><code>$ gcc -dM -E - &lt; /dev/null
  ...
  #define __DBL_MAX__ ((double)1.79769313486231570815e+308L)
  #define __DBL_MIN__ ((double)2.22507385850720138309e-308L)
  ...
  </code></pre>
  
  <p>My question is:<br>
  Why are the values defined as <code>long double</code> with suffix <code>L</code> and then casted back to a <code>double</code>?</p>
  
  <p><strong>2.
  Question:</strong></p>
  
  <p>Why is the <code>__DBL_MIN_10_EXP__</code> defined with <code>-307</code> but the minimum exponent is <code>-308</code> as it is used above in the <code>DBL_MIN</code> macro? In the case of the maximum exponent it is defined with <code>308</code> which I can understand as it is used by the <code>DBL_MAX</code> macro.</p>
  
  <pre><code>#define __DBL_MAX_10_EXP__ 308
  #define __DBL_MIN_10_EXP__ (-307)
  </code></pre>
  
  <hr>
  
  <p><strong>Not part of the question, just observations I made:</strong></p>
  
  <p>By the way using Windows with Visual Studio 2015 there are just the <code>DBL_MAX</code> and <code>DBL_MIN</code> macros defined without the compiler specific redirection to the versions with the underscore. Further the minimum positive double value <code>DBL_MIN</code> and the maximum double value <code>DBL_MAX</code> are a little bit greater than the values from my Linux gcc compiler (just compared to the defined macros from gcc v4.8.5 above):</p>
  
  <pre><code>#define DBL_MAX        1.7976931348623158e+308
  #define DBL_MIN        2.2250738585072014e–308
  </code></pre>
  
  <p>Moreover the Microsoft compiler set the <code>long double</code> limits to the values of a <code>double</code>, seems that it doesn't support a real <code>long double</code> implementation.</p>