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
可能允许哈希表实现节省一些空间,并且可能会提醒用户在涉及高精度的任何上下文中都不会使用该值。我选择了浮动
基本上就是你说的
至于性能,这里提到了这一点,以及它在总体方案中的重要性(尽管是在捍卫浮点与整数的使用的背景下):
运行时浮点参数的成本是每次重新刷新(不是每次插入)时的一次浮点乘法。即使使用增量散列,这几乎肯定会与重新散列的成本相形见绌
“可能会提醒用户,该值不会在涉及高精度的任何上下文中使用”。随着时间的推移,我了解到编程语言的发展,以及编程的一般性,都是为了提高程序员的直觉。这句话就是一个很好的例子。