【发布时间】:2011-11-16 05:19:39
【问题描述】:
最近,我很好奇浮点哈希算法是如何工作的,所以我查看了boost::hash_value 的源代码。原来是fairly complicated。实际的实现循环遍历基数中的每个数字并累积一个哈希值。与整数散列函数相比,它涉及更多。
我的问题是:为什么浮点哈希算法应该更复杂?为什么不直接对浮点值的二进制表示进行散列,就好像它是一个整数一样?
喜欢:
std::size_t hash_value(float f)
{
return hash_value(*(reinterpret_cast<int*>(&f)));
}
我意识到float 不能保证在所有系统上都与int 大小相同,但是可以使用一些模板元程序来处理这种事情,以推导出一个大小相同的整数类型作为float。那么引入一个完全不同的专门对浮点类型进行操作的哈希函数有什么好处呢?
【问题讨论】:
-
正如所写,您违反了严格的别名规则(如果
int与float的大小不同,则更糟),但我很想知道将其转换为给定长度的char*。
标签: c++ hash floating-point