Предполагается, что магическое число составляет 32 случайных бита, причем каждый из них с равной вероятностью равен 0 или 1 и не имеет простой корреляции между битами.Обычный способ найти строку таких битов - использовать двоичное разложение иррационального числа;в этом случае это число является обратной величиной золотого отношения:
phi = (1 + sqrt(5)) / 2
2^32 / phi = 0x9e3779b9
Таким образом, включение этого числа «случайным образом» меняет каждый бит начального числа;как вы говорите, это означает, что последовательные значения будут далеко друг от друга.Включение сдвинутых версий старого начального числа гарантирует, что, даже если hash_value()
имеет довольно маленький диапазон значений, различия скоро будут распределены по всем битам.