On Tuesday, 28 February 2017 at 17:57:14 UTC, Andrei Alexandrescu
wrote:
This is of possible interest:
https://probablydance.com/2017/02/26/i-wrote-the-fastest-hashtable/ -- Andrei
But let’s say you know that your hash function returns numbers
that are well distributed and that you’re rarely going to get
hash collisions even if you use powers of two.
In which case you don't need powers of 2 either.
ucent h = hash64(key);
ulong slot = (h * slotCount) >> 64;
And you get what you want, with no constraint on the number of
slots. Note that on most architectures, this actually lowers to
one mulhi operation, which is typically 3 cycles.