diff options
| author | Guido van Rossum <guido@python.org> | 1997-01-11 19:26:21 (GMT) | 
|---|---|---|
| committer | Guido van Rossum <guido@python.org> | 1997-01-11 19:26:21 (GMT) | 
| commit | 919cf1aff1b28d784fa91e31994875aa91a9ed55 (patch) | |
| tree | 242c09490dbe685e52cab8d0f72beeb4393c322f /Objects/floatobject.c | |
| parent | 265b5b3f038a0baa5924b3a312da1874e55587f2 (diff) | |
| download | cpython-919cf1aff1b28d784fa91e31994875aa91a9ed55.zip cpython-919cf1aff1b28d784fa91e31994875aa91a9ed55.tar.gz cpython-919cf1aff1b28d784fa91e31994875aa91a9ed55.tar.bz2  | |
New, better hash for floating point and complex
Diffstat (limited to 'Objects/floatobject.c')
| -rw-r--r-- | Objects/floatobject.c | 11 | 
1 files changed, 9 insertions, 2 deletions
diff --git a/Objects/floatobject.c b/Objects/floatobject.c index f61eaeb..1cebf8c 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -236,9 +236,16 @@ float_hash(v)  		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;  | 
