On Fri, Feb 10, 2017 at 7:03 AM, Connor Abbott <cwabbo...@gmail.com> wrote:
> On Thu, Feb 9, 2017 at 4:16 PM, Jan Ziak <0xe2.0x9a.0...@gmail.com> wrote:
>> Hello
>>
>> IMPORTANT NOTE: Using the uint32_t data type, quad_hash*quad_hash will
>> overflow as soon as the hash table has more than 2**16=65536=64K
>> elements. To enable more than 64K elements in hash table, the data
>> types need to be changed to uint64_t - unfortunately uint64_t
>> arithmetic operations will slow down the hash table in 32-bit OpenGL
>> apps.
>
> This actually doesn't matter, since at the end of the day we only need
> the result modulo the table size which is a power of two -- even if
> the multiplication overflows, the lowest n bits (if the table size is
> 2^n) are still correct, so we get the same answer as long as we use at
> least n bits.

Yes, you are right. I sent the post before realizing it.

(k+x*x)%m
= (k+(x*x)%m)%m
= (k+((x*x)%A)%m)%m, A=n*m, A>=m, n>=1

m: hash table size, a power of 2
A: 2**32 in case of uint32_t
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to