Nombre magique dans boost::hash_combine

La boost::hash_combine fonction de modèle prend une référence à un hachage (appelé seed) et un objet v. Selon le docs, il combine seed avec le hash de v par

seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);

Je vois que c'est déterministe. Je ne vois pourquoi un XOR est utilisé.

Je parie que les plus aide à la cartographie des valeurs similaires largement séparées, afin de sonder les tables de hachage ne se décomposent pas, mais quelqu'un peut m'expliquer ce que la magie de la constante est?

  • Étant donné que sur de nombreux ordinateurs un entier tourner coûtent environ le même prix qu'un changement aurait-il un quelconque avantage dans la conversion de l'expression: <code> la graine ^= hash_value(v) + 0x9e3779b9 + rotl(semences, 6) + rotr(semences, 2); </code>
InformationsquelleAutor Fred Foo | 2011-02-09