
You're right. We'd have to ask the author, but I guess the "| 1" in "hash_mult = uniform_dist(rnd) | 1" is there to avoid the (very unlikely) case hash_mult = 0. In any case, this small adjustment doesn't change the big picture
I think reason people pick odd number is because if your multiplier is power of 2 last bits are guaranteed to be 0. * the number 11400714819323198486 is closer but we don’t want multiples of two because that would throw away one bit)*
Yes, that was my - I dare not say reasoning - my intuition. I tried discussing this with a mathematician friend, but all I could get out of her was: "my field is differential topology, not integer number theory" :-D
the values are confined to a range that is around 10^14 times smaller than 2^64
type_ids are few, and they are confined in the initialized data segment in theory, and in practice they are consecutive in a small range of memory. J-L