title: How to create a good hash_combine with 64 bit output (inspired by boost::hash_combine)
body: <p>Currently Boost has hash_combine function that outputs 32 bit unsigned integer (to be precise, size_t). Some references:</p>
  
  <p><a href="http://www.boost.org/doc/libs/1_43_0/doc/html/hash/reference.html#boost.hash_combine" rel="nofollow noreferrer">http://www.boost.org/doc/libs/1_43_0/doc/html/hash/reference.html#boost.hash_combine</a></p>
  
  <p><a href="http://www.boost.org/doc/libs/1_43_0/doc/html/hash/combine.html" rel="nofollow noreferrer">http://www.boost.org/doc/libs/1_43_0/doc/html/hash/combine.html</a></p>
  
  <p><a href="https://stackoverflow.com/questions/4948780/magic-numbers-in-boosthash-combine">Magic number in boost::hash_combine</a></p>
  
  <p>I'd like to explore on how to create 64 bit version of hash_combine.</p>
  
  <p>The first thing is to get golden ratio or any other irrational number in 64 bit.</p>
  
  <p>The second part is to use shifts. This part rather tricky and I'd like to ask if there are best practices or guide on using shifts to get hash values? Or choosing shifts like the original code:</p>
  
  <pre><code>seed ^= hash_value(v) + 0x9e3779b9 + (seed &lt;&lt; 6) + (seed &gt;&gt; 2); 
  </code></pre>
  
  <p>is totally random?</p>
  
  <p>Also how to evaluate the output of <code>hash_combine</code> to make sure that it doesn't create more collisions than the original hash function <code>hash_value</code>?</p>