c++ - std::unordered_set::load_factor,为什么浮点数而不是双精度数?
问题描述
我知道最快的类型取决于本地 ALU 实现float
,double
它通常基于双精度。当你根据逆向精度进行计算时,ALU 必须一直进行相应的精度转换。
那么,为什么选择标准float
来表示load_factor
?我想这是为了节省对哈希表容器的内存思考,但我想知道是否有更强有力的理由。
解决方案
这发生在原始提案的修订版 3 中:
将负载因子操作更改为使用
float
而不是double
稍后给出了理由(在“E. 哈希调整大小的控制”下):
浮点参数应该是 type
float
还是 typedouble
?它几乎没有什么区别。一方面,double
通常是“自然”浮点类型,在没有强烈相反理由的情况下使用。另一方面,float
可能允许哈希表实现节省一些空间,并可能提醒用户该值不会在任何涉及高精度的上下文中使用。我选择了float
。
所以基本上你说的。
至于性能,这里提到了这一点,以及它在宏伟的计划中并不重要(尽管在捍卫使用浮点数与整数的背景下):
运行时浮点参数的成本是每次重新散列(而不是每次插入)时的一次浮点乘法。即使使用增量散列,这几乎肯定会与重新散列的成本相形见绌。
推荐阅读
- python - typing.NamedTuple 和可变的默认参数
- android - 如何在应用程序中的实时位置仅添加 1 个标记
- php - 如何使它在 PHP 中读取值而不是名称
- javascript - 如何在mongodb的创建和删除过程中确保最小值?
- javascript - 在 Linux 服务器的节点 js 中守护任务
- python-3.x - BitlyApi:错误 500 (RATE_LIMIT_EXCEEDED)
- typescript - 与对象接口,但具有特定值
- verilog - 系统 Verilog 测试台回归运行
- spring-boot - 如何在 Spring Boot 启动时禁用连接到数据库
- sql-server-2008 - SQL server 数据表在 VS2019 Blazor WSAM 中不可见