C++ std::无序集::加载因子,为什么是浮点而不是双精度?

C++ std::无序集::加载因子,为什么是浮点而不是双精度?,c++,unordered-map,unordered-set,C++,Unordered Map,Unordered Set,我知道float和double之间最快的类型取决于本机ALU实现,它通常基于双精度。当您基于反向精度进行计算时,ALU必须始终进行相应的精度转换 那么,为什么标准选择float来表示load\u系数?我想这是为了节省对散列表容器的内存思考,但我想知道是否有更强烈的原因 将负载系数操作更改为使用浮点而不是双精度 随后给出了基本原理(在“E.哈希大小控制”下): 浮点参数应该是float类型还是double类型?这没什么区别。一方面,double通常是一种“自然”浮点类型,在没有强有力的相反理由的情

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

那么,为什么标准选择
float
来表示
load\u系数
?我想这是为了节省对散列表容器的内存思考,但我想知道是否有更强烈的原因

将负载系数操作更改为使用
浮点
而不是
双精度

随后给出了基本原理(在“E.哈希大小控制”下):


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

基本上就是你说的

至于性能,这里提到了这一点,以及它在总体方案中的重要性(尽管是在捍卫浮点与整数的使用的背景下):

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


“可能会提醒用户,该值不会在涉及高精度的任何上下文中使用”。随着时间的推移,我了解到编程语言的发展,以及编程的一般性,都是为了提高程序员的直觉。这句话就是一个很好的例子。