-
Notifications
You must be signed in to change notification settings - Fork 996
Open
Description
the default hash for floats works by casting the value to size_t
:
template <> struct hash<float>
{ size_t operator()(float val) const { return static_cast<size_t>(val); } };
this is quite bad because anything that is between two integers gets hashed to the same value. my hash table essentially turned into a linear array because most of the values happened to be in the [0; 1] range.
the same applies to hashes for other floating point types (double, long double etc.).
when fixing this, keep in mind that floating point numbers have two representations for 0 (0 and -0) - those two bit patterns should hash to the same value because they represent the same number.
dBagrat, track3r, VelocityRa, IonutCava and BertVandenBoschdBagrat, pineapplemachine and Roman-Skabin
Metadata
Metadata
Assignees
Labels
No labels