最近,我对浮点数的哈希算法很感兴趣,所以我查看了boost::hash_value
的源代码。结果发现这是相当复杂的。实际实现会循环每个进制下的数字并累加哈希值。与整数哈希函数相比,它要复杂得多。
我的问题是:为什么浮点数哈希算法应该更复杂呢?为什么不只是像哈希整数一样哈希浮点数的二进制表示?
例如:
std::size_t hash_value(float f)
{
return hash_value(*(reinterpret_cast<int*>(&f)));
}
我意识到在所有系统上,float
的大小不能保证与int
相同,但这种情况可以通过一些模板元程序来处理,以推断出一个与float
大小相同的整数类型。那么引入一个完全不同的哈希函数,专门针对浮点类型操作的优势是什么?