首页 > 解决方案 > std::unordered_set::load_factor,为什么浮点数而不是双精度数?

问题描述

我知道最快的类型取决于本地 ALU 实现floatdouble它通常基于双精度。当你根据逆向精度进行计算时,ALU 必须一直进行相应的精度转换。

那么,为什么选择标准float来表示load_factor?我想这是为了节省对哈希表容器的内存思考,但我想知道是否有更强有力的理由。

标签: c++unordered-mapunordered-set

解决方案


这发生在原始提案的修订版 3 中

将负载因子操作更改为使用float而不是double

稍后给出了理由(在“E. 哈希调整大小的控制”下):

浮点参数应该是 typefloat还是 type double?它几乎没有什么区别。一方面,double通常是“自然”浮点类型,在没有强烈相反理由的情况下使用。另一方面,float可能允许哈希表实现节省一些空间,并可能提醒用户该值不会在任何涉及高精度的上下文中使用。我选择了float

所以基本上你说的。

至于性能,这里提到了这一点,以及它在宏伟的计划中并不重要(尽管在捍卫使用浮点数整数的背景下):

运行时浮点参数的成本是每次重新散列(而不是每次插入)时的一次浮点乘法。即使使用增量散列,这几乎肯定会与重新散列的成本相形见绌。


推荐阅读