title: Python epsilon is not the smallest number
body: <p>What does <code>sys.float_info.epsilon</code> return?</p>
  
  <p>On my system I get:</p>
  
  <pre><code>&gt;&gt;&gt; sys.float_info.epsilon
  2.220446049250313e-16
  &gt;&gt;&gt; sys.float_info.epsilon / 2
  1.1102230246251565e-16
  &gt;&gt;&gt; 0 &lt; sys.float_info.epsilon / 2 &lt; sys.float_info.epsilon
  True
  </code></pre>
  
  <p>How is this possible?</p>
  
  <p><strong>EDIT:</strong></p>
  
  <p>You are all right, I thought epsilon does what min does. So I actually meant <code>sys.float_info.min</code>.</p>
  
  <p><strong>EDIT2</strong></p>
  
  <p>Everybody and especially John Kugelman, thanks for your answers!</p>
  
  <p>Some playing around I did to clarify things to myself:</p>
  
  <pre><code>&gt;&gt;&gt; float.hex(sys.float_info.epsilon)
  '0x1.0000000000000p-52'
  &gt;&gt;&gt; float.hex(sys.float_info.min)
  '0x1.0000000000000p-1022'
  &gt;&gt;&gt; float.hex(1 + a)
  '0x1.0000000000001p+0'
  &gt;&gt;&gt; float.fromhex('0x0.0000000000001p+0') == sys.float_info.epsilon
  True
  &gt;&gt;&gt; float.hex(sys.float_info.epsilon * sys.float_info.min)
  '0x0.0000000000001p-1022'
  </code></pre>
  
  <p>So <code>epsilon * min</code> gives the number with the smallest positive significand (or mantissa) and the smallest exponent.</p>