Sujet : Re: Good hash for pointers
De : already5chosen (at) *nospam* yahoo.com (Michael S)
Groupes : comp.lang.cDate : 03. Jun 2024, 20:41:00
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <20240603224100.00003ea1@yahoo.com>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
User-Agent : Claws Mail 4.1.1 (GTK 3.24.34; x86_64-w64-mingw32)
On Mon, 3 Jun 2024 19:48:29 +0100
bart <
bc@freeuk.com> wrote:
I don't remember seeing that anywhere. But, bucket_size is the size
of the hash-table?
Yes
And Hash_max+1 is likely to be a power of two?
Yes. At very least 2**32.
I prefer my hash values to be evaluated independently of table size.
They usually don't have a meaningful maximum value, other than the 64
bit of their type, and I'd rather they didn't have sequences of zero
bits especially at the bottom end.
Bottom is in the eye of beholder :-)
If hash_max was 2**63-1,
63 was my mistake. He suggests 2**64-1. It seems.
say, then dividing by hash_max+1 would
probably give you zero anyway, especially if you first multiplied by
a bucket size that was a power of two, as all the interesting bits
would disappear past the top bit!
Huh?
If bucket size is 2**n then
index = Hash(key)*2**n/2**64 == Hash(key) >> (64-n);
May be, you are thinking about C language arithmetic? That not what I
had in mind. In post above I used equations in their integer math
meaning rather than integer C arithmetic meaning.