title: uniform_real_distribution Is Not Uniform
body: <p>Please, help me understand this. After running the snippet:</p>
  <pre><code>random_device randomEngine;
  mt19937 generatorEngine(randomEngine());
  uniform_real_distribution&lt;double&gt; unifRandomValue(
                                         numeric_limits&lt;double&gt;::min(), 
                                         numeric_limits&lt;double&gt;::max());
  
  double test[1000];
  for (int i{ 0 }; i &lt; 1000; ++i) {
      test[i] = unifRandomValue(generatorEngine);
  }
  </code></pre>
  <p>Why is every generated value in the range <code>[1.0E306, 1.8E308]</code>? I was expecting a random value uniformly distributed from near 0 to the max of double type.</p>
  <p>Thanks in advance!</p>
  <hr />
  <h3>Here is a more complete example :</h3>
  <pre><code>const size_t size{ 1000 };
  std::random_device randomEngine;
  std::mt19937 generatorEngine(randomEngine());
  std::uniform_real_distribution&lt;double&gt; unifRandomValue(
                                  std::numeric_limits&lt;double&gt;::min(), 
                                  std::numeric_limits&lt;double&gt;::max());
  
  std::array&lt;double, size&gt; test;
  for (int i{ 0 }; i &lt; size; ++i) {
      test[i] = unifRandomValue(generatorEngine);
  }
  
  auto minMaxIt = std::minmax_element(test.begin(), test.end());
  
  // average without overflow
  double average{ 0.0 };
  for (int i{ 0 }; i &lt; size; ++i) {
      average += test[i] / size;
  }
  
  std::cout &lt;&lt; &quot;min value : &quot; &lt;&lt; *minMaxIt.first &lt;&lt; std::endl;
  std::cout &lt;&lt; &quot;max value : &quot; &lt;&lt; *minMaxIt.second &lt;&lt; std::endl;
  std::cout &lt;&lt; &quot;average   : &quot; &lt;&lt; average &lt;&lt; endl;
  
  // one possible output (they are all similar)
  //  min value : 1.73361e+305
  //  max value : 1.79661e+308
  //  average : 8.78467e+307
  </code></pre>