title: Storing small (1.0E-12) numbers as doubles in scientific notation
body: <p>Here's the setup:</p>
  
  <p>For my Bachelor's thesis, I want to test jet algorithms used at the LHC. Basically the first step is the folowing: Given some 4-momentum</p>
  
  <pre><code>p[0] = nullvector(45.0000000000106,33.03951484238976,14.97124733712793,26.6317895033428)
  </code></pre>
  
  <p>I want to simulate experimental data by adding some (like, 50) randomly generated 4-vectors to the last three components in the order of 10^(-12), so that they are small (that's where the interesting physics happens), but significantly above the double float precision of 15 decimals. So the quick-and-dirty solution to that is the following:</p>
  
  <pre><code>seed=time(NULL);
  srand(seed);
  random=(rand()%9001)*1.0E-15;
  random=random+1E-12;
  printf("%.15E\n",random);
  </code></pre>
  
  <p>This gives me random numbers between 1E-12 and 10E-12 (=1E-11) with three decimals max, so that in "real" doubles, that gives me 15 decimals.</p>
  
  <p>Now to the point: <strong>Can I store numbers in that order with more than three decimals without overstepping double float precision?</strong></p>
  
  <p>PS: Is there a better way to generate small random numbers? (This sounds like another topic ;))</p>