bug-grep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#50093: djb2 correction


From: Paul Eggert
Subject: bug#50093: djb2 correction
Date: Wed, 18 Aug 2021 07:48:09 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0

On 8/17/21 7:50 PM, Alex Murray wrote:
How about letting the compiler choose which prime to use? - something like the 
following:

#define H15_PRIME (unsigned long long)5381
#define H32_PRIME (unsigned long long)3657500101
#define H64_PRIME (unsigned long long)4123221751654370051
size_t h = H64_PRIME <= SIZE_MAX ? H64_PRIME : H32_PRIME <= SIZE_MAX ? 
H32_PRIME : H15_PRIME;

That's equivalent to the patch I suggested; on my platform it even generates the same machine code. It's better to avoid macros when that's easy, as is the case here.

I installed the patch, except with uint_fast64_t instead of unsigned long long int as that's a better type for the 64-bit constants in question. (In case you're wondering what that "_fast" is doing there, POSIX and the C standard guarantee the existence of uint_fast64_t but not of uint64_t, as a concession to Unisys mainframes where long long is 72 bits.)





reply via email to

[Prev in Thread] Current Thread [Next in Thread]