1
0
mirror of https://github.com/golang/go synced 2024-11-21 17:24:42 -07:00

runtime: fix float64 hash on 32-bit machine

Multiplying by the low 32 bits was a bad idea
no matter what, but it was a particularly unfortunate
choice because those bits are 0 for small integer values.

Fixes #2883.

R=ken2
CC=golang-dev
https://golang.org/cl/5634047
This commit is contained in:
Russ Cox 2012-02-06 11:24:34 -05:00
parent 48bd13911d
commit facee93a86

View File

@ -271,7 +271,7 @@ runtime·f64hash(uintptr *h, uintptr s, void *a)
else {
u = *(uint64*)a;
if(sizeof(uintptr) == 4)
hash = ((uint32)(u>>32) ^ 2860486313) * (uint32)u;
hash = ((uint32)(u>>32) * 3267000013UL) ^ (uint32)u;
else
hash = u;
}