[LINUX] Fonction de hachage d'entrée 32 bits / sortie de bits arbitraires

Fonction de hachage de la valeur 32 bits à la longueur en bits spécifiée. Depuis le noyau Linux.

unsigned long hash_long(unsigned long val, unsigned int bits)
{
  unsigned long hash = val * 0x9e370001UL;
  return hash >> (32 - bits);
}

Pour le nombre magique 0x9e370001 (16) / 2654404609 (10), un nombre premier proche du nombre d'or de la valeur 32 bits 2 ^ 32 * (sqrt (5) -1) / 2 = 2654435769.5 est sélectionné.

// 2^32 * (sqrt(5) - 1) / 2 = 2^31 + 2^29 - 2^25 + 2^22 - 2^19 - 2^16 + 1 = 2654404609

Recommended Posts

Fonction de hachage d'entrée 32 bits / sortie de bits arbitraires
entrée et sortie python
Entrée / sortie audio Python
Résumé des entrées / sorties standard