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

Per*_*-lk 3 c++ unordered-map unordered-set

据我所知,之间最快的一类float,并double依赖于本机ALU执行,通常是基于双精度。在基于逆向精度进行计算时,ALU必须始终执行相应的精度转换。

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

Lig*_*ica 6

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

更改了要使用的负载系数操作,float而不是double

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

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

所以基本上你说的是。

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

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