Gabriel Dos Reis wrote:

>Joe Buck <[EMAIL PROTECTED]> writes:
>
>| 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.
>
>I'm not sure we're talking about the same thing.  With the
>representations I'm talking about, value repsentation == object representation.
>
... still, the hash functions for float, double and long double that we
need for TR1 must return a size_t (6.3.3). How do you get a size_t from
an objrep_t? (fulfilling the various requirements briefly reminded by
Joe in his first message)

Paolo.

Reply via email to