zha*_*min 8 c++ floating-point dictionary key set
在地图/集合中使用双精度作为关键字的问题是浮点精度.
有些人建议在比较函数中添加epsilon,但这意味着您的密钥将不再满足必要的严格弱排序标准.这意味着您将获得不同的集/映射,具体取决于插入元素的顺序.
如果您想基于双值聚合/组合/合并数据,并且愿意允许一定程度的舍入/ epsilon(显然,您将不得不),以下解决方案是个好主意吗?
通过将它们乘以精度因子(例如1e8)并舍入到最接近的整数(int)i+0.5
(如果i> 0),将所有双精度数(我们打算作为键)转换为整数,然后创建一个关闭这些整数的集合/映射.在提取键的最终值时,将int除以精度因子以获得双值(尽管是舍入的).