Mercurial > cpython-lru_cache-weakref
diff Objects/floatobject.c @ 4933:b56bc25aec85 legacy-trunk
New, better hash for floating point and complex
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Sat, 11 Jan 1997 19:26:21 +0000 |
| parents | 65d2d8e67da3 |
| children | 002865af55e5 |
line wrap: on
line diff
--- a/Objects/floatobject.c Sat Jan 11 19:22:11 1997 +0000 +++ b/Objects/floatobject.c Sat Jan 11 19:26:21 1997 +0000 @@ -236,9 +236,16 @@ x = (long)intpart; } else { + /* Note -- if you change this code, also change the copy + in complexobject.c */ + long hipart; fractpart = frexp(fractpart, &expo); - fractpart = fractpart*2147483648.0; /* 2**31 */ - x = (long) (intpart + fractpart) ^ expo; /* Rather arbitrary */ + fractpart = fractpart * 2147483648.0; /* 2**31 */ + hipart = (long)fractpart; /* Take the top 32 bits */ + fractpart = (fractpart - (double)hipart) * 2147483648.0; + /* Get the next 32 bits */ + x = hipart + (long)fractpart + (long)intpart + (expo << 15); + /* Combine everything */ } if (x == -1) x = -2;
