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;