std :: unordered_set :: load_factor,为什么浮动而不是double?

时间:2019-08-11 13:21:52

标签: c++ unordered-map unordered-set

我了解到floatdouble之间最快的类型取决于本地ALU实现,该实现通常基于双精度。在基于逆向精度进行计算时,ALU必须始终进行相应的精度转换。

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

1 个答案:

答案 0 :(得分:6)

这发生在revision 3 of the original proposal

  

已将负载系数操作更改为使用float而不是double

稍后会给出基本原理(在“ E.控制哈希大小调整”下):

  

浮点参数应为float类型还是double类型?差别不大。一方面,double通常是在没有充分相反理由的情况下使用的“自然”浮点类型。另一方面,float可以允许哈希表实现节省一些空间,并且可以提醒用户以下事实:该值将不会在涉及高精度的任何上下文中使用。我选择了float

基本上就是你所说的。

关于性能,这里提到了它以及它在宏大的事物方案中实际上并不重要的问题(尽管在捍卫使用浮点数 versus 整数的上下文中):

  

运行时浮点参数的成本是每次重新哈希(每次插入并非)都进行一次浮点乘法。即使使用增量哈希,也几乎可以肯定,这与重新哈希的成本相形见