【发布时间】:2019-08-11 13:21:52
【问题描述】:
我了解float 和double 之间最快的类型取决于原生 ALU 实现,它通常基于双精度。当你进行逆向精度计算时,ALU必须一直做相应的精度转换。
那么,为什么标准选择float 来代表load_factor?我想这是为了节省对哈希表容器的内存思考,但我想知道是否有更强有力的理由。
【问题讨论】:
标签: c++ unordered-map unordered-set
我了解float 和double 之间最快的类型取决于原生 ALU 实现,它通常基于双精度。当你进行逆向精度计算时,ALU必须一直做相应的精度转换。
那么,为什么标准选择float 来代表load_factor?我想这是为了节省对哈希表容器的内存思考,但我想知道是否有更强有力的理由。
【问题讨论】:
标签: c++ unordered-map unordered-set
这发生在revision 3 of the original proposal:
将负载因子操作更改为使用
float而不是double
稍后给出基本原理(在“E. 哈希调整大小的控制”下):
浮点参数应该是
float类型还是double类型?它几乎没有什么区别。一方面,double通常是“自然”浮点类型,在没有强烈相反理由的情况下使用。另一方面,float可能允许哈希表实现节省一些空间,并且可能会提醒用户该值不会在任何涉及高精度的上下文中使用。我选择了float。
基本上就是你说的。
至于性能,这里提到了这一点,以及它在总体方案中的重要性(尽管在捍卫使用浮点 与 整数的上下文中):
运行时浮点参数的成本是每次重新散列时的一次浮点乘法(不是每次插入)。即使使用增量哈希,这几乎肯定会与重新哈希的成本相比相形见绌。
【讨论】: