std::unordered_set::load_factor,为什么浮动而不是双精度?



我知道floatdouble之间的最快类型取决于本机ALU实现,它通常基于双精度。当您基于逆向精度进行计算时,ALU 必须始终执行相应的精度转换。

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

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

将载客率操作更改为使用float而不是double

后面给出了基本原理(在"E. 控制哈希大小调整"下(:

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

所以基本上你说的。

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

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

最新更新