On Tue, Jul 05, 2005 at 08:05:39PM +0200, Gabriel Dos Reis wrote: > It is definitely a good thing to use the full bits of value > representation if we ever want to make all "interesting" bits part of > the hash value. For reasonable or sane representations it suffices to > get your hand on the object representation, e.g.: > > const int objsize = sizeof (double); > typedef unsigned char objrep_t[objsize]; > double x = ....; > objrep_t& p = reintepret_cast<objrep_t&>(x); > // ... > > and let frexp and friends only for less obvious value representation.
I disagree; on an ILP32 machine, we pull out only 32 bits for the hash value, and if you aren't careful, your approach will wind up using the least significant bits of the mantissa. This will cause all values that are exactly representable as floats to collide.